Powershell - Zeilen aus txt Datei auslesen, bearbeiten und in xml einfügen
Hallo,
ich möchte das jede Zeile einer Textdatei in diesem Schema gepackt und diese werte nacheinander ab Zeile 9 in eine bestehende xml Datei importiert werden.
Ich habe leider nichts hilfreiches zu genau diesem Scenario gefunden, aber gehen tut das bestimmt
Danke und Gruß
Bugger
ich möchte das jede Zeile einer Textdatei in diesem Schema gepackt
<Pattern PatternValue = '*.Zeileaustxtdatei'></Pattern>
Ich habe leider nichts hilfreiches zu genau diesem Scenario gefunden, aber gehen tut das bestimmt
Danke und Gruß
Bugger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 369056
Url: https://administrator.de/contentid/369056
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
11 Kommentare
Neuester Kommentar
XML-Dateien bearbeitet man nie so mit Stringmethoden, man sollte sie immer durch einen Parser jagen und mit dessen Methoden die Elemente hinzufügen.
Wenn du uns den ersten Ausschnitt (vom Anfang an) deiner XML postest können wir dir helfen.
Schnuffi
Wenn du uns den ersten Ausschnitt (vom Anfang an) deiner XML postest können wir dir helfen.
Schnuffi
$pathfile = 'D:\test.txt'
$pathxml = 'D:\test.xml'
$xml = new-Object XML
$xml.XmlResolver = $null
$xml.Load($pathxml)
$node = $xml.SelectSingleNode("//FileGroup/Members")
Get-Content $pathfile | %{
$el = $xml.CreateElement("Pattern")
$at = $xml.CreateAttribute("PatternValue")
$at.Value = $_
$el.Attributes.Append($at)
$node.AppendChild($el)
}
$xml.Save($pathxml)
Zitat von @Bugger:
Das funktioniert schonmal sehr gut, vielen Dank dafür. Hast du Einfluss auf die Formatierung?
Statt macht er alles so
Ob nun Anführungszeichen oder Hochkommas ist XML schnurz egal.Das funktioniert schonmal sehr gut, vielen Dank dafür. Hast du Einfluss auf die Formatierung?
Statt
<Pattern PatternValue = 'xxx'></Pattern>
<Pattern PatternValue="xxx">
> </Pattern>
Und gibt es die Möglichkeit alles an den Anfang anstatt ans ende der Gruppe zu setzen?
Kann man, das kannst du auch selbst PrependChild
Hab ich hier nicht
bei mir wird das ganze direkt so erzeugt, ist ja auch logisch da der Node kein Textnode besitzt:
Da musst du musst du selbst einen Textnode (oder Zeilenumbruch) erzeugt haben, Standard ist das definitiv nicht.
Aber an der Funktion der XML und des Knotens ändert das auch nichts.
bei mir wird das ganze direkt so erzeugt, ist ja auch logisch da der Node kein Textnode besitzt:
<Pattern PatternValue = 'xxx' />
Aber an der Funktion der XML und des Knotens ändert das auch nichts.
aber es muss UCS-2 Little Endian sein. Sonst funktioniert die xml nicht. Kann man die Kodierung vorgeben?
Sowas gibt man in der XML Declaration an , dann wird das auch richtig verarbeitet!
Dann reicht auch folgendes ohne das Ding erst zu speichern und dann neu auszulesen.
Oder mit StreamWriter.
$xml.outerxml | sc $pathxml -Encoding Unicode
$fs = new-object System.IO.FileStream([string]$pathxml,[System.IO.FileAccess]::Write)
$writer = New-Object System.IO.StreamWriter($fs,[System.Text.Encoding]::Unicode)
$xml.Save($writer)
$writer.Close()
$fs.Close()