none
XML-Deklaration mithilfe der WriteXml-Methode aus DataSet definieren RRS feed

  • Frage

  • Hallo Zusammen,

    Ich bräuchte aus einer SQL-Datenbank einen automatisierten XML-Export via PowerShell und da dachte ich an die WriteXml-Methode aus der DataSet-Klasse.
    Mir ist bewusst, dass PS ein ConvertTo-XML CmdLet besitzt, allerdings macht dieses nicht das gewünschte Format.

    Hier zuerst mein Ansatz:
    Ein DataSet wird mittels DataAdapter-Fill-Methode befüllt und dieses produziert mir mithilfe der WriteXML-Methode das XML-File

    $conn = New-Object System.Data.SqlClient.SqlConnection("....")
    $cmd = New-Object System.Data.SqlClient.SqlCommand("Select * FROM dbo.Tabelle", $conn)
    $da = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
    $ds = New-Object System.Data.DataSet
    $da.Fill($ds)
    
    $ds.DataSetName = "aa"
    $ds.Tables[0].TableName = "Table"   
    $settings = New-Object System.Xml.XmlWriterSettings
    $settings.Encoding = [System.Text.Encoding]::UTF8
    $settings.Indent = $true
    $xmlWriter = [System.Xml.XmlWriter]::Create("C:\Temp\bla.xml", $settings)
    $ds.WriteXml($xmlWriter)
    $xmlWriter.close()
    
    Jetzt die Frage:

    Kann man dieser Klasse irgendwie das 'standalone="yes"'-Attribut mitgeben? Oder geht das nur mit Regex-Methoden?
    Wenn ich die Überladung "WriteXml(String)" verwende  bekomm ich zwar das Standalone, aber kein encoding="UTF-8" mehr.
    Der Header muss nämlich so aussehen: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    Sonst macht diese Methode alles wunderbar für meine Anforderungen.

    Grüße
    speedy

    Dienstag, 30. Juli 2013 13:27

Antworten

  • Dann bleibt dir Warscheinlich nichts anderes übrig als die Kopfzeile selbst nachträglich zu Manipulieren.

    Ist ja nicht so schwer...


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    • Bearbeitet Peter Kriegel Donnerstag, 1. August 2013 09:07 bv
    • Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 1. August 2013 09:27
    • Als Antwort markiert speedcar343 Donnerstag, 1. August 2013 10:09
    Donnerstag, 1. August 2013 09:06

Alle Antworten

  • wenn du mit "Standalone" meinst, dass du das ohne XML-Schema herausschreiben willst, dann musst du diese Überladung von der WriteXML() Methode nehmen:

    http://msdn.microsoft.com/en-us/library/ms135424.aspx

    $conn = New-Object System.Data.SqlClient.SqlConnection("....")
    $cmd = New-Object System.Data.SqlClient.SqlCommand("Select * FROM dbo.Tabelle", $conn)
    $da = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
    $ds = New-Object System.Data.DataSet
    $da.Fill($ds)
    
    $ds.DataSetName = "aa"
    $ds.Tables[0].TableName = "Table"   
    $settings = New-Object System.Xml.XmlWriterSettings
    $settings.Encoding = [System.Text.Encoding]::UTF8
    $settings.Indent = $true
    $xmlWriter = [System.Xml.XmlWriter]::Create("C:\Temp\bla.xml", $settings)
    $ds.WriteXml($xmlWriter, ([System.Data.XmlWriteMode]::IgnoreSchema))
    $xmlWriter.close()



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Dienstag, 30. Juli 2013 13:55
  • Hallo Peter,

    danke für die Antwort, diese Überladung liefert mir aber das gleiche Ergebnis, es steht immer noch kein standalone dabei.
    Mir gehts nur rein darum, dass die Kopfzeile so aussieht:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

    Sowie mit dieser Überladung: $ds.WriteXml("C:\Temp\bla.xml"). Nur mit dieser hab ich halt kein utf8 encoding mehr, was ich allerdings unbedingt brauche...

    Donnerstag, 1. August 2013 08:33
  • Dann bleibt dir Warscheinlich nichts anderes übrig als die Kopfzeile selbst nachträglich zu Manipulieren.

    Ist ja nicht so schwer...


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    • Bearbeitet Peter Kriegel Donnerstag, 1. August 2013 09:07 bv
    • Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 1. August 2013 09:27
    • Als Antwort markiert speedcar343 Donnerstag, 1. August 2013 10:09
    Donnerstag, 1. August 2013 09:06
  • ok, hätt mir gedacht das wär vielleicht möglich.
    Trotzdem danke!

    Donnerstag, 1. August 2013 10:09