Jump to content

Powershell XML mit mehreren Inhalten in einer Datei


Go to solution Solved by mwiederkehr,

Recommended Posts

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 to comment

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

Edited by BOfH_666
Link to comment

@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 to comment

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 to comment
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
    #>
}

 

Edited by BOfH_666
Link to comment

@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 to comment
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:;-)

  • Like 1
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...