fbook1610 0 Geschrieben 4. September Melden Teilen Geschrieben 4. September Hallo zusammen. Ich bin sicherlich kein Profi was PowerShell betrifft. Aber so einiges habe ich bereits umsetzen können auch dank der Hilfe von diesem Forum. Ich bekomme von einem Lieferanten XML Dateien geliefert, die aber mehrere Inhalte beinhalten. Also so zusagen 4 Dateien in einem File. Die erhaltene Datei hat also 4 Zeilen wo jeweils "ALLES" drin steht. Also auch die XML Deklaration usw. Wenn ich nur eine Zeile benutze (den Rest also manuell lösche) dann kann ich alles einlesen und weiter verarbeiten. $xmlinhalt = New-Object System.XML.XMLDocument $xmlinhalt.Load("C:\test\test.xml") Ich muss jetzt eine Lösung finden wie jede Zeile als "eigenständiges" XML File verarbeitet wird. Ich hoffe man versteht was ich meine und jemand kann mir helfen. Gruß Frank Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 4. September Melden Teilen Geschrieben 4. September (bearbeitet) Hmmm ... als nachhaltigeste Lösung würde ich versuchen, den Lieferanten dazu zu bringen standard-konforme XML-Dateien zu liefern. Als Workaround einfach die eine Datei in 4 aufsplitten. 🤷🏼♂️ ... oder eben mit einer Schleife jede Zeile einzeln "durchhühnern". bearbeitet 4. September von BOfH_666 Zitieren Link zu diesem Kommentar
fbook1610 0 Geschrieben 4. September Autor Melden Teilen Geschrieben 4. September @BofH_666 Das ich vom Lieferanten "vernümftige" Dateien bekommen hatte ich bereits erfolglos versucht. Die nennen das "multiple XML file". Angeblich wäre das "normal". Auch das mit Zeile mit einer foreach Schleife habe ich versucht, schient aber nicht zu gehen. Bekomme da folgende Fehlermeldung: Ausnahme beim Aufrufen von "Load" mit 1 Argument(en): "Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im Dokument sein. Davor sind keine Leerzeichen zulässig. Zeile 2, Position 3." In C:\Scripte\eingang.ps1:7 Zeichen:1 + $ovf.Load($files) + ~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException Und diese Meldung bekomme ich für jede Zeile. Wie würdest du das mit dem aufteilen machen? Zitieren Link zu diesem Kommentar
testperson 1.706 Geschrieben 4. September Melden Teilen Geschrieben 4. September Hi, du musst das komplette XML einlesen und dann zeilenweise durchgehen. Beispielsweise (PowerShell: StreamReader, ReadLine und leere Zeilen – Evgenij Smirnov – IT Pro aus Berlin (it-pro-berlin.de)): $sread = [System.IO.StreamReader]::new($file) while ($sread.EndOfStream -eq $false) { $line = $sread.ReadLine() $xmlinhalt = New-Object System.XML.XMLDocument $xmlinhalt.Load($line) } Ggfs. hilft es aber auch einfach mal eine Beispiel XML mit zwei, drei Zeilen hier zu posten. Gruß Jan Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 4. September Melden Teilen Geschrieben 4. September (bearbeitet) vor 2 Stunden schrieb fbook1610: Wie würdest du das mit dem aufteilen machen? Im einfachsten Fall, wenn Du wirklich pro Zeile ein komplettes XML hast, etwa so: $DateiInhalt = Get-Content -Path 'C:\test\test.xml' $xmlinhalt = New-Object System.XML.XMLDocument foreach ($Zeile in $DateiInhalt) { $xmlinhalt.Load($Zeile) <# Hier Dein weiterer Code, um die XML-Inhalte zu verarbeiten #> } bearbeitet 4. September von BOfH_666 Zitieren Link zu diesem Kommentar
fbook1610 0 Geschrieben 4. September Autor Melden Teilen Geschrieben 4. September @testperson @BOfH_666 Bei beiden Lösungen bekomme ich schon beim einlesen folgende Fehlermeldung: Ausnahme beim Aufrufen von "Load" mit 1 Argument(en): "Illegales Zeichen im Pfad." In Zeile:8 Zeichen:5 + $xmlinhalt.Load($line) + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException Und diese Meldung kommt für jede vorhandene Zeile in der Datei. Habe mal ein Screenshot angehängt wie die Zeilenanfänge aussehen. Vielleicht hilft das. Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 4. September Melden Teilen Geschrieben 4. September Nö hilft nicht, weil das Ende fehlt... Womit hören die Zeilen auf? Also was ist der komplette Inhalt einer Zeile? Und nein, das ist NICHT standardkonform. Zitieren Link zu diesem Kommentar
fbook1610 0 Geschrieben 4. September Autor Melden Teilen Geschrieben 4. September Die Datei enthält leider zu viele Daten die ich nicht veröffentlichen kann. Aber das Ende ist halt, das alle Tags wieder geschlossen werden. Wie gesagt ist jede Zeile eine vollwertige XML Datei. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 4. September Melden Teilen Geschrieben 4. September vor einer Stunde schrieb fbook1610: Und diese Meldung kommt für jede vorhandene Zeile in der Datei. Sagtest Du nicht 4 ("vier") Zeilen? vor 19 Minuten schrieb fbook1610: Die Datei enthält leider zu viele Daten die ich nicht veröffentlichen kann. Kürze doch die Datei einfach mal auf 2 oder 3 Zeilen und entferne oder tausche alle sensiblen Information aus. Wenn Du Fehlermeldungen postest, poste bitte dazu den kompletten Code, den Du benutzt hast und formatiere diesen auch als Code - nicht als Zitat! Wenn Du Beispiel-Daten postest, formatiere auch diese bitte als Code - Bilder von Code oder Fehlermeldungen oder Beispieldaten helfen uns nicht weiter. 1 Zitieren Link zu diesem Kommentar
Beste Lösung mwiederkehr 382 Geschrieben 4. September Beste Lösung Melden Teilen Geschrieben 4. September XmlDocument.Load erwartet einen Dateinamen oder einen Stream als Parameter. Will man einen String übergeben, muss man die Methode XmlDocument.LoadXml verwenden. 3 Zitieren Link zu diesem Kommentar
fbook1610 0 Geschrieben 5. September Autor Melden Teilen Geschrieben 5. September @mwiederkehr Das hat es gebracht. Vielen lieben Dank. Hier mein Code $inhalt = Get-Content $file foreach ($zeile in $inhalt){ $ovf = New-Object System.XML.XMLDocument $ovf.LoadXML("$Zeile") #Weiterverarbeiten } Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.