XML Datei mit PowerShell in mehrere XML splitten (inkl. Zeilenumbrüche)
Hallo zusammen,
ich möchte eine XML-Catalog-Datei von Dell mit mehreren Einträgen in einzelne XML-Dateien aufteilen.
Dabei bin ich bereits hier im Forum auf eine Lösung gestoßen:
XML Datei mit Powershell splitten
Jedoch wird in meinem Fall die neu erzeugte Datei ohne Zeilenumbrüche erzeugt und der gesamte Dateiinhalt in eine Zeile wiedergeben.
Das PowerShell-Skript sieht wie folgt aus:
Ich habe im Verdacht, dass es etwas mit der Codierung/Encoding zu tun hat.
Jedoch bin ich mit der Angabe verschiedener Codierungen wie "UFT8", "bigendianunicode" bei "Get-Content"/"set-content" bisher nicht auf die Lösung gekommen
Hat jemand eine Idee, wo der Fehler sein könnte?
Die eingelesene Datei ist Unicode bzw. Notepad++ nach in "UCS-2 LE BOM" kodiert:
Danke vielmals und Grüße
Tralveller
ich möchte eine XML-Catalog-Datei von Dell mit mehreren Einträgen in einzelne XML-Dateien aufteilen.
Dabei bin ich bereits hier im Forum auf eine Lösung gestoßen:
XML Datei mit Powershell splitten
Jedoch wird in meinem Fall die neu erzeugte Datei ohne Zeilenumbrüche erzeugt und der gesamte Dateiinhalt in eine Zeile wiedergeben.
Das PowerShell-Skript sieht wie folgt aus:
$xml = [xml](Get-Content "CatalogPC.xml")
$xml.SelectNodes("//SoftwareComponent") | %{
$name = $_.identifier + ".xml"
"<?xml version=`"1.0`" encoding=`"utf-16`"?><SoftwareComponent>$($_.outerXML)</SoftwareComponent>" | set-content -Encoding utf8 $name
}
Ich habe im Verdacht, dass es etwas mit der Codierung/Encoding zu tun hat.
Jedoch bin ich mit der Angabe verschiedener Codierungen wie "UFT8", "bigendianunicode" bei "Get-Content"/"set-content" bisher nicht auf die Lösung gekommen
Hat jemand eine Idee, wo der Fehler sein könnte?
Die eingelesene Datei ist Unicode bzw. Notepad++ nach in "UCS-2 LE BOM" kodiert:
<?xml version="1.0" encoding="utf-16"?>
<Manifest baseLocation="downloads.dell.com" dateTime="2020-08-17T13:37:15+05:30" releaseID="XT3XX" version="20.08.17" identifier="d7949e25-f9f6-43b3-9026-cc0975a4b71b" predecessorID="05bac99d-7e19-4d48-9770-b6446e21ec6a">
<ReleaseNotes>
<Display lang="en"><![CDATA[Dell Version Control Catalog is an aggregation of all Dell Update Package(DUP)s metadata currently released on downloads.dell.com]]></Display>
</ReleaseNotes>
<InventoryComponent schemaVersion="2.0" releaseID="VWVNY" hashMD5="13cd6d48e938cc4f5ee33aca5a1551d9" size="17464032" path="FOLDER06510790M/1/InvColPC_8.2.8.0.exe" dateTime="08/20/2020" releaseDate="August 20,2020" vendorVersion="8.2.8.0" dellVersion="A00" osCode="WIN" />
<SoftwareComponent schemaVersion="2.0" identifier="4f2ba279-a949-4eab-ad5e-013ce5b41c3f" packageID="99DDD" releaseID="99DDD" hashMD5="a80be7463e1be35704d9e954ce8b063b" path="FOLDER05035765M/6/Realtek-High-Definition-Audio-Driver_99DDD_WIN_6.0.1.8454_A02_03.EXE" dateTime="2018-06-04T08:22:52Z" releaseDate="July 21, 2020" vendorVersion="6.0.1.8454" dellVersion="A02" packageType="LWXP" size="166950288">
<Name>
<Display lang="en"><![CDATA[Realtek High Definition Audio Driver,6.0.1.8454,A02]]></Display>
</Name>
<ComponentType value="DRVR">
<Display lang="en"><![CDATA[Driver]]></Display>
</ComponentType>
<Description>
<Display lang="en"><![CDATA[This package contains the driver for Realtek High Definition audio. Audio driver is the software that helps your operating system to communicate with audio devices such as sound cards and speakers.]]></Display>
</Description>
<Category value="AU">
<Display lang="en"><![CDATA[Audio]]></Display>
</Category>
<SupportedDevices>
<Device componentID="100352" embedded="false">
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="07B3" subVendorID="1028" />
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="0814" subVendorID="1028" />
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="0818" subVendorID="1028" />
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="0819" subVendorID="1028" />
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="081E" subVendorID="1028" />
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="081F" subVendorID="1028" />
<PCIInfo deviceID="0256" vendorID="10EC" subDeviceID="0820" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="0831" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="0832" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="0889" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="088A" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="1831" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="1832" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="1889" subVendorID="1028" />
<PCIInfo deviceID="0289" vendorID="10EC" subDeviceID="188A" subVendorID="1028" />
<Display lang="en"><![CDATA[Realtek High Definition Audio]]></Display>
</Device>
</SupportedDevices>
<SupportedOperatingSystems>
<OperatingSystem osCode="IOT01" osVendor="Microsoft" majorVersion="10" minorVersion="0" spMajorVersion="0" spMinorVersion="0" osArch="x64">
<Display lang="en"><![CDATA[Windows 10 64-Bit]]></Display>
</OperatingSystem>
<OperatingSystem osCode="W10H4" osVendor="Microsoft" majorVersion="10" minorVersion="0" spMajorVersion="0" spMinorVersion="0" osArch="x64">
<Display lang="en"><![CDATA[Windows 10 64-Bit]]></Display>
</OperatingSystem>
<OperatingSystem osCode="W10P4" osVendor="Microsoft" majorVersion="10" minorVersion="0" spMajorVersion="0" spMinorVersion="0" osArch="x64">
<Display lang="en"><![CDATA[Windows 10 64-Bit]]></Display>
</OperatingSystem>
</SupportedOperatingSystems>
<LUCategory value="NONE">
<Display lang="en"><![CDATA[NONE]]></Display>
</LUCategory>
<SupportedSystems>
<Brand key="4" prefix="LAT">
<Display lang="en"><![CDATA[Latitude]]></Display>
<Model systemID="07B3">
<Display lang="en"><![CDATA[3189]]></Display>
</Model>
<Model systemID="0814">
<Display lang="en"><![CDATA[5495]]></Display>
</Model>
<Model systemID="0818">
<Display lang="en"><![CDATA[5491]]></Display>
</Model>
<Model systemID="0819">
<Display lang="en"><![CDATA[5591]]></Display>
</Model>
<Model systemID="081E">
<Display lang="en"><![CDATA[3190]]></Display>
</Model>
<Model systemID="081F">
<Display lang="en"><![CDATA[3190-2-in-1]]></Display>
</Model>
</Brand>
<Brand key="11" prefix="PRE">
<Display lang="en"><![CDATA[Precision]]></Display>
<Model systemID="0831">
<Display lang="en"><![CDATA[7530]]></Display>
</Model>
<Model systemID="1831">
<Display lang="en"><![CDATA[7530]]></Display>
</Model>
<Model systemID="0832">
<Display lang="en"><![CDATA[7730]]></Display>
</Model>
<Model systemID="1832">
<Display lang="en"><![CDATA[7730]]></Display>
</Model>
<Model systemID="0820">
<Display lang="en"><![CDATA[3530]]></Display>
</Model>
</Brand>
</SupportedSystems>
<ImportantInfo URL="http://www.dell.com/support/home/us/en/19/Drivers/DriversDetails?driverId=99DDD" />
<Criticality value="1">
<Display lang="en"><![CDATA[Recommended]]></Display>
</Criticality>
</SoftwareComponent>
</Manifest>
Danke vielmals und Grüße
Tralveller
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 599353
Url: https://administrator.de/contentid/599353
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
Das hat nichts mit dem Encoding zu tun denn Set-Content schreibt es so weg wie du es selbst formatierst, das kennt ja kein XML, du musst entweder die entsprechende Methode zum Abspeichern eines XML-Objects nutzen oder alternativ einen 'System.Xml.XmlWriter' Object verwenden. Erst dann wird XML "pretty" ausgegeben.
Zeile 4 ersetzen durch (Ausgabe-Ordner anpassen)
Zeile 4 ersetzen durch (Ausgabe-Ordner anpassen)
([xml]"<?xml version=`"1.0`" encoding=`"utf-16`"?><SoftwareComponent>$($_.outerXML)</SoftwareComponent>").Save("C:\Ordner\$name")
Moin,
wie der Kollege schon richtig sagte: Nimm die Methoden der Powershell, wenn Du XML manipulieren willst. Hier ein paar Links:
https://www.langlitz-it.de/?p=1297
https://www.heise.de/ix/artikel/Datenzugriff-506816.html
https://www.powershellmagazine.com/2013/08/19/mastering-everyday-xml-tas ...
Vor allem der letzte ist für Dein Problem interessant. Welcher Teil, verrate ich nicht. Du musst schon alles lesen.
Liebe Grüße
Erik
wie der Kollege schon richtig sagte: Nimm die Methoden der Powershell, wenn Du XML manipulieren willst. Hier ein paar Links:
https://www.langlitz-it.de/?p=1297
https://www.heise.de/ix/artikel/Datenzugriff-506816.html
https://www.powershellmagazine.com/2013/08/19/mastering-everyday-xml-tas ...
Vor allem der letzte ist für Dein Problem interessant. Welcher Teil, verrate ich nicht. Du musst schon alles lesen.
Liebe Grüße
Erik