Jump to content

Powershell XML mit mehreren Inhalten in einer Datei


Direkt zur Lösung Gelöst von mwiederkehr,

Empfohlene Beiträge

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

Link zu diesem Kommentar

@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?

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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 von BOfH_666
Link zu diesem Kommentar

@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.

Unbenannt.PNG

Link zu diesem Kommentar
vor einer Stunde schrieb fbook1610:

Und diese Meldung kommt für jede vorhandene Zeile in der Datei.

Sagtest Du nicht 4 ("vier") Zeilen?  :hmmm:

 

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.  :achtung:;-)

Link zu diesem Kommentar

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...