Batch - TXT zu XML konvertieren
Guten Tag,
ich bin gerade dabei zu versuchen, eine TXT mit einer Bestellung in eine XML umzuwandeln. Im ersten Step bin ich auch gut voran gekommen.
Dabei nutze ich die Batch (mit einer TXT-Datei mit Variabeln), um eine einfache .XML Datei zu erstellen:
Export-TXT-Datei mit Variabeln:
Batch-Skript:
Erstellte XML:
Jetzt kommt allerdings die Herausforderung, an der ich gerade verzweifle. In die XML sollen nun noch mehrere (je nach dem, wie viele Artikelnummern sich in der Export-TXT befinden) "Items":
Gewünschte XML mit mehreren "Items" (je nach dem, wie viele Artikelnummern sich in der Export-TXT befinden):
Jemand eine Idee, wie ich das umsetzen kann?
ich bin gerade dabei zu versuchen, eine TXT mit einer Bestellung in eine XML umzuwandeln. Im ersten Step bin ich auch gut voran gekommen.
Dabei nutze ich die Batch (mit einer TXT-Datei mit Variabeln), um eine einfache .XML Datei zu erstellen:
Export-TXT-Datei mit Variabeln:
1.0;UTF-8;12345;2020-09-25;Shipping;Max Muster;Beispielstraße 123;Musterstadt;Muster-Bundesland;12345;Musterland;
Batch-Skript:
@echo off
set "source=C:\Users\User-01\Desktop\export.txt"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "xml version=%%a"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "encoding=%%b"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "PurchaseOrderNumber=%%c"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "OrderDate=%%d"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "Address Type=%%e"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "Name=%%f"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "Street=%%g"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "City=%%h"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "State=%%i"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "Zip=%%j"
for /f "usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,* delims=;" %%a in ("%source%") do set "Country=%%k"
(
echo ^<?xml version="%xml version%" encoding="%encoding%"?^>
echo ^<PurchaseOrder PurchaseOrderNumber="%PurchaseOrderNumber%" OrderDate="%OrderDate%"^>
echo ^<Address Type="%Address Type%"^>
echo ^<Name^>%Name%^</Name^>
echo ^<Street^>%Street%^</Street^>
echo ^<City^>%City%^</City^>
echo ^<State^>%State%^</State^>
echo ^<Zip^>%Zip%^</Zip^>
echo ^<Country^>%Country%^</Country^>
echo ^</Address^>
echo ^</PurchaseOrder^>
) > testaxample.xml
Erstellte XML:
<?xml version="1.0" encoding="UTF-8"?>
<PurchaseOrder PurchaseOrderNumber="12345" OrderDate="2020-09-25">
<Address Type="Shipping">
<Name>Max Muster</Name>
<Street>Beispielstraße 123</Street>
<City>Musterstadt</City>
<State>Muster-Bundesland</State>
<Zip>12345</Zip>
<Country>Musterland</Country>
</Address>
</PurchaseOrder>
Jetzt kommt allerdings die Herausforderung, an der ich gerade verzweifle. In die XML sollen nun noch mehrere (je nach dem, wie viele Artikelnummern sich in der Export-TXT befinden) "Items":
1.0;UTF-8;12345;2020-09-25;Shipping;Max Muster;Beispielstraße 123;Musterstadt;Muster-Bundesland;12345;Musterland;123456;Beispielartikel;1;149.95;Beispielkommentar;1234567;Beispielartikel-1;5;119.95;Beispielkommentar-1;
Gewünschte XML mit mehreren "Items" (je nach dem, wie viele Artikelnummern sich in der Export-TXT befinden):
<?xml version="1.0" encoding="UTF-8"?>
<PurchaseOrder PurchaseOrderNumber="12345" OrderDate="2020-09-25">
<Address Type="Shipping">
<Name>Max Muster</Name>
<Street>Beispielstraße 123</Street>
<City>Musterstadt</City>
<State>Muster-Bundesland</State>
<Zip>12345</Zip>
<Country>Musterland</Country>
</Address>
<Items>
<Item PartNumber="123456">
<ProductName>Beispielartikel</ProductName>
<Quantity>1</Quantity>
<Price>149.95</Price>
<Comment>Beispielkommentar</Comment>
</Item>
<Item PartNumber="1234567">
<ProductName>Beispielartikel-1</ProductName>
<Quantity>5</Quantity>
<Price>119.95</Price>
<Comment>Beispielkommentar-1</Comment>
</Item>
</Items>
</PurchaseOrder>
Jemand eine Idee, wie ich das umsetzen kann?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 607642
Url: https://administrator.de/contentid/607642
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
Warum? Batch is a pain in the a.
Ja, mit der Powershell:
https://www.langlitz-it.de/?p=1297
Liebe Grüße
Erik
Zitat von @freshman2017:
ich bin gerade dabei zu versuchen, eine TXT mit einer Bestellung in eine XML umzuwandeln. Im ersten Step bin ich auch gut voran gekommen.
Dabei nutze ich die Batch (mit einer TXT-Datei mit Variabeln), um eine einfache .XML Datei zu erstellen:
ich bin gerade dabei zu versuchen, eine TXT mit einer Bestellung in eine XML umzuwandeln. Im ersten Step bin ich auch gut voran gekommen.
Dabei nutze ich die Batch (mit einer TXT-Datei mit Variabeln), um eine einfache .XML Datei zu erstellen:
Warum? Batch is a pain in the a.
Jemand eine Idee, wie ich das umsetzen kann?**
Ja, mit der Powershell:
https://www.langlitz-it.de/?p=1297
Liebe Grüße
Erik
Joa, mit Powershell würdest du es dir so viel einfacher machen, aber bei ihm scheint es ja wohl nie mal Klick zu machen, kommt jedes mal wieder mit dem 80er Batch Gegrätsche ... 🐟
Feierabend.
Export-TXT-Datei mit Variabeln:
Wer sich so ein Export-Format ausdenkt hat echt einen an der Waffel .$file = 'D:\orders.txt'
$ausgabeordner = 'D:\Ausgabe'
gc $file | %{
$cols = $_.split(";")
[xml]$xml = @"
<?xml version=`"$($cols)`" encoding=`"$($cols[1])`"?>
<PurchaseOrder PurchaseOrderNumber="$($cols[2])" OrderDate="$($cols[3])">
<Address Type="$($cols[4])">
<Name>$($cols[5])</Name>
<Street>$($cols[6])</Street>
<City>$($cols[7])</City>
<State>$($cols[8])</State>
<Zip>$($cols[9])</Zip>
<Country>$($cols[10])</Country>
</Address>
<Items/>
</PurchaseOrder>
"@
$itemsnode = $xml.SelectSingleNode("/PurchaseOrder/Items")
0..((($cols.Count - 11)/5)-1) | %{
$index = 11+($_*5)
$itm = $xml.CreateElement("Item")
$itm.SetAttribute("PartNumber",$cols[$index])
$node = $Xml.CreateElement("ProductName")
$node.innerText = $cols[$index+1]
[void]$itm.AppendChild($node)
$node = $Xml.CreateElement("Quantity")
$node.innerText = $cols[$index+2]
[void]$itm.AppendChild($node)
$node = $Xml.CreateElement("Price")
$node.innerText = $cols[$index+3]
[void]$itm.AppendChild($node)
$node = $Xml.CreateElement("Comment")
$node.innerText = $cols[$index+4]
[void]$itm.AppendChild($node)
[void]$itemsnode.AppendChild($itm)
}
$xml.Save((join-path $ausgabeordner "Order_$($cols[2]).xml"))
}
Ich habe jetzt gesehen, dass er aus bspw. dem "ß" folgendes macht: "ß" - wie kann ich hier die Formatierung einstellen?
Bei Get-Content (gc) in Zeile 4 das Encoding deiner Textdatei ensprechend der Kodierung deiner Textdatei anpassen.Bsp :
gc $file -Encoding Default | %{