Automatisches Hinzufügen eines statischen Parameter per batch in mehreren xml Dateien
Hallo zusammen.
Folgendes Szenario bei dem ich Hilfe benötige.
Beim Export eines Lieferscheins wird für jeden Lieferschein eine xml Datei erzeugt, welche in ein Tool des Versanddienstleisters importiert wird. Der Austausch findet über einen fest definierten Ordner statt, aus dem alle Dateien durch das Tool von UPS importiert werden. Dieser Ordner ist frei wählbar.
Nun möchte ich gern per Batch und geplantem Task vor Import in das Tool des Versanddienstleisters die xml verändern respektive um einen statischen Wert erweitern und in veränderter Kopie in einem anderen Ordner ablegen.
Hier der Code einer Beispieldatei:
Ursprungsversion:
<?xml version='1.0' encoding="ISO-8859-1"?>
<OpenShipments xmlns="x-schema:OpenShipments.xdr">
<OpenShipment ShipmentOption="" ProcessStatus="">
<ShipTo>
<CompanyOrName>Test User</CompanyOrName><Attention></Attention><Address1>Teststraße 1</Address1><CountryTerritory>DE</CountryTerritory><PostalCode>12345</PostalCode><CityOrTown>testsadt</CityOrTown></ShipTo>
<ShipmentInformation><ServiceType>ST</ServiceType><PackageType>CP</PackageType><ShipmentActualWeight>0,9</ShipmentActualWeight><Reference1>100363</Reference1><Reference2>211196</Reference2><Reference3>111197</Reference3><NumberOfPackages>1</NumberOfPackages><SpecialInstructionForShipment></SpecialInstructionForShipment></ShipmentInformation>
</OpenShipment>
</OpenShipments>
veränderte Version:
<?xml version='1.0' encoding="ISO-8859-1"?>
<OpenShipments xmlns="x-schema:OpenShipments.xdr">
<OpenShipment ShipmentOption="" ProcessStatus="">
<ShipTo>
<CompanyOrName>Test User</CompanyOrName><Attention></Attention><Address1>Teststraße 1</Address1><CountryTerritory>DE</CountryTerritory><PostalCode>12345</PostalCode><CityOrTown>testsadt</CityOrTown></ShipTo>
<ShipmentInformation><ServiceType>ST</ServiceType><PackageType>CP</PackageType><ShipmentActualWeight>0,9</ShipmentActualWeight><Reference1>100363</Reference1><Reference2>211196</Reference2><Reference3>111197</Reference3><NumberOfPackages>1</NumberOfPackages><SpecialInstructionForShipment></SpecialInstructionForShipment><profileName>standard</profileName></ShipmentInformation>
</OpenShipment>
</OpenShipments>
Der hinzuzufügende statische Wert ist in der veränderten Version fett gekennzeichnet.
Kann mir da jemand behilflich sein? Meine Batchkenntnisse hören leider beim "hello world" auf
Vielen Dank für Ideen und Anregungen.
Gruß
Stefan
Folgendes Szenario bei dem ich Hilfe benötige.
Beim Export eines Lieferscheins wird für jeden Lieferschein eine xml Datei erzeugt, welche in ein Tool des Versanddienstleisters importiert wird. Der Austausch findet über einen fest definierten Ordner statt, aus dem alle Dateien durch das Tool von UPS importiert werden. Dieser Ordner ist frei wählbar.
Nun möchte ich gern per Batch und geplantem Task vor Import in das Tool des Versanddienstleisters die xml verändern respektive um einen statischen Wert erweitern und in veränderter Kopie in einem anderen Ordner ablegen.
Hier der Code einer Beispieldatei:
Ursprungsversion:
<?xml version='1.0' encoding="ISO-8859-1"?>
<OpenShipments xmlns="x-schema:OpenShipments.xdr">
<OpenShipment ShipmentOption="" ProcessStatus="">
<ShipTo>
<CompanyOrName>Test User</CompanyOrName><Attention></Attention><Address1>Teststraße 1</Address1><CountryTerritory>DE</CountryTerritory><PostalCode>12345</PostalCode><CityOrTown>testsadt</CityOrTown></ShipTo>
<ShipmentInformation><ServiceType>ST</ServiceType><PackageType>CP</PackageType><ShipmentActualWeight>0,9</ShipmentActualWeight><Reference1>100363</Reference1><Reference2>211196</Reference2><Reference3>111197</Reference3><NumberOfPackages>1</NumberOfPackages><SpecialInstructionForShipment></SpecialInstructionForShipment></ShipmentInformation>
</OpenShipment>
</OpenShipments>
veränderte Version:
<?xml version='1.0' encoding="ISO-8859-1"?>
<OpenShipments xmlns="x-schema:OpenShipments.xdr">
<OpenShipment ShipmentOption="" ProcessStatus="">
<ShipTo>
<CompanyOrName>Test User</CompanyOrName><Attention></Attention><Address1>Teststraße 1</Address1><CountryTerritory>DE</CountryTerritory><PostalCode>12345</PostalCode><CityOrTown>testsadt</CityOrTown></ShipTo>
<ShipmentInformation><ServiceType>ST</ServiceType><PackageType>CP</PackageType><ShipmentActualWeight>0,9</ShipmentActualWeight><Reference1>100363</Reference1><Reference2>211196</Reference2><Reference3>111197</Reference3><NumberOfPackages>1</NumberOfPackages><SpecialInstructionForShipment></SpecialInstructionForShipment><profileName>standard</profileName></ShipmentInformation>
</OpenShipment>
</OpenShipments>
Der hinzuzufügende statische Wert ist in der veränderten Version fett gekennzeichnet.
Kann mir da jemand behilflich sein? Meine Batchkenntnisse hören leider beim "hello world" auf
Vielen Dank für Ideen und Anregungen.
Gruß
Stefan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 239347
Url: https://administrator.de/contentid/239347
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Stefan, Willkommen auf Administrator.de!
Hier eine Lösung mit Powershell um das XML-File azupassen:
Für ein einzelnes XML-File
Für einen ganzen Ordner mit XML-Dateien
Grüße Uwe
mäh sagte das Schaaf als es von der Kuh verspeist wurde
Hier eine Lösung mit Powershell um das XML-File azupassen:
Für ein einzelnes XML-File
$fileIN = "C:\Ordner\shipment.xml"
$fileOUT = "C:\andererOrdner\shipment.xml"
$xml = New-Object XML
$xml.Load($fileIN)
# Neues Element erzeugen
$el = $xml.CreateElement("profileName","x-schema:OpenShipments.xdr")
$txtnode = $xml.CreateTextNode("standard")
$el.AppendChild($txtnode) | out-null
# Das neue Element im entsprechenden Knoten hinzufügen
$xml.OpenShipments.OpenShipment.ShipmentInformation.AppendChild($el) | out-null
#Neues XML-File speichern
$xml.Save($fileOUT)
Für einen ganzen Ordner mit XML-Dateien
$folderIN = "C:\OrdnerIN"
$folderOUT = "C:\OrdnerOUT"
$folderErledigt = "C:\OriginalErledigt"
foreach($file in (dir "$folderIN\*.xml") | ?{!$_.PSIsContainer}){
$xml = New-Object XML
$xml.Load($file.FullName)
# Neues Element erzeugen
$el = $xml.CreateElement("profileName","x-schema:OpenShipments.xdr")
$txtnode = $xml.CreateTextNode("standard")
$el.AppendChild($txtnode) | out-null
# Element hinzufügen
$xml.OpenShipments.OpenShipment.ShipmentInformation.AppendChild($el) | out-null
#Neues XML-File im anderen Ordner speichern
$xml.Save("$folderOUT\" + $file.Name)
# Original-File in einem AblageOrdner speichern
move-item $File.FullName -Destination $folderErledigt -Force
}
mäh sagte das Schaaf als es von der Kuh verspeist wurde
Hi Stefan,
öhm das ist aber kein valides XML was du da gepostet hast, die Zahlen und Zeichen außerhalb der Tags sind normalerweise nicht erlaubt!
Beispiel:
wenn die Nodes irgendwo unterhalb vom Node-Tree OpenShipments eingefügt werden sollen so ("die Namespace Angabe ist hier nötig beim Erzeugen von Elementen da Oberhalb ein Namespace angegeben ist!")
Verfügbare Methoden, Eigenschaften, Beispiele etc. falls Attribute usw. hinzugefügt werden müssen, kannst du hier in der Referenz nachlesen
Grüße Uwe
öhm das ist aber kein valides XML was du da gepostet hast, die Zahlen und Zeichen außerhalb der Tags sind normalerweise nicht erlaubt!
Beispiel:
wenn die Nodes irgendwo unterhalb vom Node-Tree OpenShipments eingefügt werden sollen so ("die Namespace Angabe ist hier nötig beim Erzeugen von Elementen da Oberhalb ein Namespace angegeben ist!")
# Obersten Knoten erzeugen
$elQVNOption = $xml.CreateElement("QVNOption","x-schema:OpenShipments.xdr")
# Nachfolgenden Knoten erzeugen
$elQVNREC = $xml.CreateElement("QVNRecipientAndNotificationTypes","x-schema:OpenShipments.xdr")
# Elemente und deren Textnodes erzeugen
$elCompanyOrName = $xml.CreateElement("CompanyOrName","x-schema:OpenShipments.xdr")
#Textknoten für das Element erzeugen (dies ist der Textinhalt des Elementes)
$elCompanyOrNameText = $xml.CreateTextNode("FirmaXYZ")
#Textknoten in das Element hängen
$elCompanyOrName.AppendChild($elCompanyOrNameText)
# usw......
...
..
.
# Elemente im Knoten **QVNRecipientAndNotificationTypes** hinzufügen
$elQVNREC.AppendChild($elCompanyOrName)
$elQVNREC.AppendChild($elContactName)
# usw...
..
# Knoten **QVNRecipientAndNotificationTypes** an den Knoten QVNOption anhängen
$elQVNOption.AppendChild($elQVNREC)
# Und dann zum Schluss den gesamten erzeugten Tree an der richtigen Stelle wie oben in Zeile 13 des ersten Scripts einhängen..
Grüße Uwe