Mijn vraag
Voor een script krijgen wij een file met daarin een een hele hoop XML tekst. Een voorbeeld hiervan is hieronder.
Van deze file wil ik de volgende gegevens hebben:
Wat ik geprobeerd heb met XMLstarlet is het volgende (ik heb even alleen idpurchaseorder en idproduct gebruikt voor de leesbaarheid).
De uitkomst hiervan was:
Dit klopt natuurlijk niet aangezien het 2de product niet erbij staat
Met wat aanpassingen bij xmlstarlet:
Dit bracht me al korter in de buurt namelijk:
Hier heb ik wel het 2de product echter heb ik niet de purchaseorderid erbij staan. Wat ik verwacht is onderstaande:
Met wat zoeken heb ik uitgevonden dat ik de subnodes als eerste moet selecteren echter snap ik niet hoe ik daarna de hoofdnode per regel kan toevoegen.
Ik kan wel met omwegen aan alle data komen maar dat is natuurlijk weer onhandig aangezien het ook met xmlstarlet moet kunnen. Ik heb echter al de hele dag zitten puzzelen maar ik zie niet wat ik fout doe of wat ik moet aanpassen.
Voor een script krijgen wij een file met daarin een een hele hoop XML tekst. Een voorbeeld hiervan is hieronder.
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| <searchresults> <success>true</success> <data> <idpurchaseorder>373251</idpurchaseorder> <idsupplier>42919</idsupplier> <idwarehouse>4863</idwarehouse> <idtemplate>3994</idtemplate> <purchaseorderid>PO2019-1008</purchaseorderid> <supplier_orderid>09-09-2019</supplier_orderid> <supplier_name></supplier_name> <status>purchased</status> <products> <idpurchaseorder_product>5275880</idpurchaseorder_product> <idproduct>10307107</idproduct> <productcode>P00019664</productcode> <productcode_supplier>0389450893456</productcode_supplier> <name>Unold 78856</name> <price>99</price> <amount>1</amount> <amountreceived>0</amountreceived> </products> </data> <data> <idpurchaseorder>373062</idpurchaseorder> <idsupplier>42561</idsupplier> <idwarehouse>4863</idwarehouse> <idtemplate>3994</idtemplate> <purchaseorderid>PO2019-1007</purchaseorderid> <supplier_orderid>09-09-2019</supplier_orderid> <supplier_name></supplier_name> <status>purchased</status> <products> <idpurchaseorder_product>5272744</idpurchaseorder_product> <idproduct>10304708</idproduct> <productcode>P00172393</productcode> <productcode_supplier>34556WDR09</productcode_supplier> <name>Product 2</name> <price>999</price> <amount>1</amount> <amountreceived>0</amountreceived> </products> <products> <idpurchaseorder_product>5272745</idpurchaseorder_product> <idproduct>10304135</idproduct> <productcode>P00020201</productcode> <productcode_supplier>345345074</productcode_supplier> <name>Productname</name> <price>99</price> <amount>1</amount> <amountreceived>0</amountreceived> </products> </data> </searchresults> |
Van deze file wil ik de volgende gegevens hebben:
code:
1
| idpurchaseorder;idsupplier;purchaseorderid;idproduct;productcode;price;amount;amountreceived |
Wat ik geprobeerd heb met XMLstarlet is het volgende (ik heb even alleen idpurchaseorder en idproduct gebruikt voor de leesbaarheid).
code:
1
| xmlstarlet sel -t -m //searchresults/data -v "concat(idpurchaseorder,';',products/idproduct)" -n purchaseorders.xml |
De uitkomst hiervan was:
code:
1
2
| 373251;10307107 373062;10304708 |
Dit klopt natuurlijk niet aangezien het 2de product niet erbij staat
Met wat aanpassingen bij xmlstarlet:
code:
1
| xmlstarlet sel -t -m //searchresults/data -v idpurchaseorder -o ";" -v products/idproduct -n purchaseorders.xml |
Dit bracht me al korter in de buurt namelijk:
code:
1
2
3
| 373251;10307107 373062;10304708 10304135 |
Hier heb ik wel het 2de product echter heb ik niet de purchaseorderid erbij staan. Wat ik verwacht is onderstaande:
code:
1
2
3
| 373251;10307107 373062;10304708 373062;10304135 |
Met wat zoeken heb ik uitgevonden dat ik de subnodes als eerste moet selecteren echter snap ik niet hoe ik daarna de hoofdnode per regel kan toevoegen.
Ik kan wel met omwegen aan alle data komen maar dat is natuurlijk weer onhandig aangezien het ook met xmlstarlet moet kunnen. Ik heb echter al de hele dag zitten puzzelen maar ik zie niet wat ik fout doe of wat ik moet aanpassen.
-Te huur