XMLstarlet geeft geen info

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 08:25

Yagermeister

Bedrijfsprutser on call

Topicstarter
Mijn vraag
Ik heb een script geschreven waarbij XMLStarlet informatie oproept vanuit een XML file.

Dit zelfde script gebruik ik al voor een ander XML bestand en daar werkt alles prima. Echter voor dit nieuwe script krijg ik alleen informatie zodra ik met de hand de regel uitvoer. Zodra het in het bash script staat werkt het niet.

code:
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

PAD='/srv/prijslijst/lightspeed'
TIJDDATUM=$(date +"%Y%m%d%H%M%S")
DATUM=$(date +"%Y%m%d")

xmlstarlet sel -t -m /products/product -v "concat(id,';', \
        title,';', \
        deliverydate/resource/id,';', \
        variants/resource/url
)" -n /srv/prijslijst/lightspeed/producten/products.xml > /srv/prijslijst/lightspeed/producten/products.csv


De XML file is als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<products>
  <product>
    <id>72601415</id>
    <createdAt>2018-05-30T15:31:17+02:00</createdAt>
    <updatedAt>2018-05-31T12:40:20+02:00</updatedAt>
    <isVisible>true</isVisible>
    <visibility>auto</visibility>
    <hasMatrix>false</hasMatrix>
    <data01/>
    <data02>1</data02>
    <data03/>
    <url>statafel-wit-60cm</url>
    <title>Statafel wit 60cm</title>
   <deliverydate>false</deliverydate>
    <variants>
      <resource>
        <id>false</id>
        <url>variants?product=72601415</url>
        <link>https://api.webshopapp.com/nl/variants.xml?product=72601415</link>
      </resource>
    </variants>
</product>


Zoals gezegd, als ik dit met de hand uitvoer werkt het prima echter in het script werkt het niet terwijl in een ander script hetzelfde wel gewoon werkt.

Ik heb al vanalles geprobeerd om bijv alleen 1 waarde terug te halen maar ook dit werkt allemaal niet. Heeft iemand een idee wat er fout kan zijn?

[ Voor 26% gewijzigd door Yagermeister op 05-06-2018 17:12 . Reden: Toevoeging XML file ]

-Te huur

Alle reacties


Acties:
  • 0 Henk 'm!

  • TheOmen
  • Registratie: September 2011
  • Nu online
Ik mis in elk geval een sluitende products-tag in je xml, maar ik vermoed dat dat een copy-paste error is....

Running is nothing more than a series of arguments between the part of your brain that wants to stop and the part that wants to keep going.


Acties:
  • +1 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 29-09 21:21

Hero of Time

Moderator LNX

There is only one Legend

Draai het script eens met 'set +x' voor extra debugging. Je krijgt dan te zien wat het script werkelijk uitvoert.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Je kan ook even
code:
1
xmllint --noout bestand.xml

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 08:25

Yagermeister

Bedrijfsprutser on call

Topicstarter
TheOmen schreef op dinsdag 5 juni 2018 @ 17:16:
Ik mis in elk geval een sluitende products-tag in je xml, maar ik vermoed dat dat een copy-paste error is....
Klopt. Die was ik vergeten over te zetten. Ik heb een aantal regels weg gelaten omdat die niet relevant zijn of info in staat wat niet van belang is.
Hero of Time schreef op dinsdag 5 juni 2018 @ 18:50:
Draai het script eens met 'set +x' voor extra debugging. Je krijgt dan te zien wat het script werkelijk uitvoert.
Ik krijg geen extra output. Wat op zich raar is natuurlijk alhoewel natuurlijk alleen 2x bovenstaande erin staat.
DJMaze schreef op dinsdag 5 juni 2018 @ 18:59:
Je kan ook even
code:
1
xmllint --noout bestand.xml
Die heb ik niet geinstalleerd omdat ik alles met xmlstarlet doe. Ga ik voor de zekerheid morgen even heen kijken en proberen.


Het gekke is dat in het andere script bovenstaande gewoon werkt maar niet in deze versie. Bij de XML's zelf is niet veel verschil. Ik heb zelfs gecontroleerd of de xml tags met hoofdletters waren maar dat is dus ook niet zo.

-Te huur


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 29-09 21:21

Hero of Time

Moderator LNX

There is only one Legend

@Yagermeister, sorry, ik gebruik de optie niet vaak, maar het moet 'set -x' zijn. Als je je script hier volledig hebt gepost, wat is dan het doel van de paar variabelen die je aan het begin definieert?

Enne, moet op regel 10 niet nog een \ aan het einde staan zodat de ) -n .... van regel 11 wordt meegenomen?

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 08:25

Yagermeister

Bedrijfsprutser on call

Topicstarter
Hero of Time schreef op dinsdag 5 juni 2018 @ 21:17:
@Yagermeister, sorry, ik gebruik de optie niet vaak, maar het moet 'set -x' zijn. Als je je script hier volledig hebt gepost, wat is dan het doel van de paar variabelen die je aan het begin definieert?

Enne, moet op regel 10 niet nog een \ aan het einde staan zodat de ) -n .... van regel 11 wordt meegenomen?
Die variablen worden op een later moment gebruikt. Ik doe stukje voor stukje het script opbouwen zodat ik niet steeds alles opnieuw moet gaan nakijken.

Zodra dit stukje werkt ga ik met de daadwerkelijk verwerking aan de slag. Daarbij heb ik deze variablen in elk script van mij staan omdat ik deze in best veel script ook daadwerkelijk gebruik. Nu voor te testen heb ik de $PAD variable even weggehaald omdat ik deze ook wou uitsluiten.

Ik heb even gekeken maar in het andere script heb ik ook geen \ bij de voorlaatste regel. Met deze extra \ erbij krijg ik ook geen data retour.

Het set moest idd -x zijn. Dit had ik even snel opgezocht maar alsnog fout overgenomen :+

De code die ik nu krijg laat geen extra details zien. Onderstaande volledige code hiervan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+ exec
+ PAD=/srv/prijslijst/lightspeed
++ date +%Y%m%d%H%M%S
+ TIJDDATUM=20180605212411
++ date +%Y%m%d
+ DATUM=20180605
+ rm /srv/prijslijst/lightspeed/producten/voorraad.csv
+ rm /srv/prijslijst/lightspeed/verwerking/combine_1.csv /srv/prijslijst/lightspeed/verwerking/combine_2.csv
+ xmlstarlet sel -t -m /products/product -v 'concat(id,'\'';'\'',       title,'\'';'\'',        deliverydate/resource/id,'\'';'\'',     variants/resource/url )' -n /srv/prijslijst/lightspeed/producten/products.xml
+ sed -i 's/variants?product=//g' /srv/prijslijst/lightspeed/producten/products.csv
+ sed -i '1i productid;productname;deliveryid;variantid' /srv/prijslijst/lightspeed/producten/products.csv
+ xmlstarlet sel -T -t -m /variants/variant -v 'concat(id,'\'';'\'',    ean,'\'';'\'',  sku,'\'';'\'',  priceIncl,'\'';'\'',    priceCost,'\'';'\'',    stockLevel,'\'';'\'',   product/resource/id
)' -n /srv/prijslijst/lightspeed/producten/variants.xml
+ sed -i '1i variantid;ean;sku;price;cost;stock;productid' /srv/prijslijst/lightspeed/producten/variants.csv
++ sort -k 1,1 /srv/prijslijst/lightspeed/producten/products.csv
+ join -t ';' -1 1 -2 7 -o 2.3 1.1 1.2 1.3 2.1 2.2 2.4 2.5 2.6 /dev/fd/63 /dev/fd/62
++ sort -k 1,7 /srv/prijslijst/lightspeed/producten/variants.csv
++ sort -k 1,1 /srv/prijslijst/lightspeed/verwerking/combine_1.csv
+ join -t ';' -1 1 -2 1 -o 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.2 2.5 2.4 2.6 2.7 /dev/fd/63 /dev/fd/62
++ sort -k 1,1 /srv/prijslijst/lightspeed/producten/voorraad.csv
+ exit 1


Er zijn trouwens 2 regels uitgecomment waar hij de nieuwe files doet downloaden. Dit heb ik even express gedaan zodat die niet de server gaat zitten te hammeren. Dit maakt voor het verloop echter niks uit aangezien die daarna gewoon met dezelfde files begint.

Dit sort/join is overigens het vervolg gedeelte dat ik met de hand al klaar gemaakt had maar er toen achter kwam dat xmlstarlet geen zin erin had. Dit heb ik nu wel even met de set code erin laten zitten.

Bij de bovenste van de 2 xmlstarlet heb ik overigens wel de extra \ erbij gelaten om het verschil te kunnen zien.

[ Voor 1% gewijzigd door Yagermeister op 05-06-2018 21:31 . Reden: Toevoeging ]

-Te huur


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 29-09 21:21

Hero of Time

Moderator LNX

There is only one Legend

Nu heb je voor 'leesbaarheid' het xmlstarlet commando op meerdere regels gezet, maar als je dat nou eens niet doet. Want zoals ik de debug uitvoer lees, wordt er letterlijk een '\' toegevoegd en dat gaat natuurlijk niet goed. Ik heb ook niet al te beste ervaringen met uitlijnen op zo'n manier als je specifieke tekst wilt parsen. Want er is nogal een verschil in het volgende:
code:
1
2
echo "hello \
world"

En
code:
1
2
echo "hello \
      world"

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 08:25

Yagermeister

Bedrijfsprutser on call

Topicstarter
Hero of Time schreef op dinsdag 5 juni 2018 @ 21:43:
Nu heb je voor 'leesbaarheid' het xmlstarlet commando op meerdere regels gezet, maar als je dat nou eens niet doet. Want zoals ik de debug uitvoer lees, wordt er letterlijk een '\' toegevoegd en dat gaat natuurlijk niet goed. Ik heb ook niet al te beste ervaringen met uitlijnen op zo'n manier als je specifieke tekst wilt parsen. Want er is nogal een verschil in het volgende:
code:
1
2
echo "hello \
world"

En
code:
1
2
echo "hello \
      world"
Dat is natuurlijk wat lastig door het over copyen. In de code is het in ieder geval met tabs gedaan. Ik heb de code even voor je aangepast zodat het op 1 regel staat. De debug code is nu als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+ exec
+ PAD=/srv/prijslijst/lightspeed
++ date +%Y%m%d%H%M%S
+ TIJDDATUM=20180605220019
++ date +%Y%m%d
+ DATUM=20180605
+ rm /srv/prijslijst/lightspeed/producten/voorraad.csv
+ rm /srv/prijslijst/lightspeed/verwerking/combine_1.csv /srv/prijslijst/lightspeed/verwerking/combine_2.csv
+ xmlstarlet sel -t -m /products/product -v 'concat(id,'\'';'\'', title,'\'';'\'', deliverydate/resource/id,'\'';'\'', variants/resource/url )' -n /srv/prijslijst/lightspeed/producten/products.xml
+ sed -i 's/variants?product=//g' /srv/prijslijst/lightspeed/producten/products.csv
+ sed -i '1i productid;productname;deliveryid;variantid' /srv/prijslijst/lightspeed/producten/products.csv
+ xmlstarlet sel -T -t -m /variants/variant -v 'concat(id,'\'';'\'', ean,'\'';'\'', sku,'\'';'\'', priceIncl,'\'';'\'', priceCost,'\'';'\'', stockLevel,'\'';'\'', product/resource/id)' -n /srv/prijslijst/lightspeed/producten/variants.xml
+ sed -i '1i variantid;ean;sku;price;cost;stock;productid' /srv/prijslijst/lightspeed/producten/variants.csv
++ sort -k 1,1 /srv/prijslijst/lightspeed/producten/products.csv
+ join -t ';' -1 1 -2 7 -o 2.3 1.1 1.2 1.3 2.1 2.2 2.4 2.5 2.6 /dev/fd/63 /dev/fd/62
++ sort -k 1,7 /srv/prijslijst/lightspeed/producten/variants.csv
++ sort -k 1,1 /srv/prijslijst/lightspeed/verwerking/combine_1.csv
+ join -t ';' -1 1 -2 1 -o 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.2 2.5 2.4 2.6 2.7 /dev/fd/63 /dev/fd/62


Ik had overigens ook nog even "xmlstarlet fo products.xml > products2.xml" gedaan om te zien of de layout niet goed was maar ook dit hielp niet met het uitvoeren van het script. Dit gedeelte werkt overigens wel. Ik zou bijna zeggen dat het script de hele xmlstarlet regel niet ziet of gewoon keihard negeert. Het rare is ook gewoon dat als ik deze op de command line plak, dat alles gewoon prima werkt.

[ Voor 8% gewijzigd door Yagermeister op 05-06-2018 22:05 ]

-Te huur


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 29-09 21:21

Hero of Time

Moderator LNX

There is only one Legend

Je zet de boel nog steeds op nieuwe regels door \ te gebruiken. Ik geef juist aan dat niet te doen. Je geeft zelf aan dat als je het met de hand uitvoert, het geen probleem is. Je zet dan het hele xmlstarlet commando zonder \ en tabs/spaties op een enkele regel.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 08:25

Yagermeister

Bedrijfsprutser on call

Topicstarter
Hero of Time schreef op dinsdag 5 juni 2018 @ 22:06:
Je zet de boel nog steeds op nieuwe regels door \ te gebruiken. Ik geef juist aan dat niet te doen. Je geeft zelf aan dat als je het met de hand uitvoert, het geen probleem is. Je zet dan het hele xmlstarlet commando zonder \ en tabs/spaties op een enkele regel.
Ik zie wat je bedoelt maar dat is echt niet wat in het script staat op dit moment:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
xmlstarlet sel -t -m /products/product -v "concat(id,';', title,';', deliverydate/resource/id,';', variants/resource/url )" -n /srv/prijslijst/lightspeed/producten/products.xml > /srv/prijslijst/lightspeed/producten/products.csv

#xmlstarlet sel -t -m /products/product -v "concat(id,';', \
#       title,';', \
#       deliverydate/resource/id,';', \
#       variants/resource/url \
#)" -n /srv/prijslijst/lightspeed/producten/products.xml > /srv/prijslijst/lightspeed/producten/products.csv


xmlstarlet sel -T -t -m /variants/variant -v "concat(id,';', ean,';', sku,';', priceIncl,';', priceCost,';', stockLevel,';', product/resource/id)" -n $PAD/producten/variants.xml > $PAD/producten/variants.csv

#xmlstarlet sel -T -t -m /variants/variant -v "concat(id,';', \
#       ean,';', \
#       sku,';', \
#       priceIncl,';', \
#       priceCost,';', \
#       stockLevel,';', \
#       product/resource/id
#)" -n $PAD/producten/variants.xml > $PAD/producten/variants.csv


Zoals je ziet is de originele code uitgecomment.

Daarbij heb ik overigens ook de originele code op de command line uitgevoerd en deze was gewoon werkend. Het lijkt mij dan ook raar dat dit het probleem is aangezien het andere script precies hetzelfde is als deze.

Ik heb nog even wat verder zitten te klooien en ben zover gekomen dat het script nu als volgt opgeroepen wordt:
code:
1
xmlstarlet sel -t -m /products/product -v 'concat(id,";", title,";", deliverydate/resource/id,";", variants/resource/url)' -n /srv/prijslijst/lightspeed/producten/products.xml > /srv/prijslijst/lightspeed/producten/products.csv


Nu geeft de debugging het als volgt weer:
code:
1
+ xmlstarlet sel -t -m /products/product -v 'concat(id,";", title,";", deliverydate/resource/id,";", variants/resource/url)' -n /srv/prijslijst/lightspeed/producten/products.xml


Maar er is nog steeds geen data in de csv te vinden :X .

[ Voor 15% gewijzigd door Yagermeister op 06-06-2018 16:46 ]

-Te huur


Acties:
  • 0 Henk 'm!

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 08:25

Yagermeister

Bedrijfsprutser on call

Topicstarter
Even een bump met nog een update.

Ik heb de regel van xmlstartlet aangepast naar welgeteld 1 waarde (id) die hij moet weergeven maar zelfs dit doet hij niet.

Ik ga nu bijna zo ver om te denken dat de regel gewoon niet wordt uitgevoerd ondanks dat ik geen verschil zie tussen dit script en een het andere script waar het wel werkt. Deste meer ook omdat via de commandline zelf de regel gewoon werkt.


Negeer bovenstaande maar. Ik had een foutje erin staan waardoor die niet werkte met 1 waarde.

Ik heb nu dus alsnog met 1 waarde (id) geprobeerd en hier krijg ik results terug. Het lijkt er dus op dat de regel werkt echter niet met meerdere waardes oproepen. Daarbij lijkt het ook erop dat de waardes niet naar een file weggeschreven willen worden.

Ik snap het echt niet meer :'(


En negeer bovenstaande ook maar weer.

Ik had eens het creatieve idee om alleen de xmlstarlet regel in een los script te zetten in dezelfde dir als dat de files staan en viola, het werkt 8)7

Dus het originele stukje code werkt via een los script. Het moet echt niet gekker worden. Het is in ieder geval opgelost alhoewel niet op de manier dat ik eigenlijk wou hebben maar goed. Dat is het volgende probleem dan weer. Ik kan in ieder geval verder met de rest.



En negeer bovenstaande ook maar weer (voor de laatste keer |:( .

Ik heb het probleem gevonden. Het was niet het xmlstarlet gedeelte maar een sed die ik daarna deed om een regel toe te voegen. Deze had ik inline geedit maar op het einde had ik ipv file, file > file gedaan en dus werd de file steeds overschreven. |:(

Gelukkig is het hele probleem nu opgelost en sta ik lekker voor }:O

[ Voor 68% gewijzigd door Yagermeister op 07-06-2018 14:18 ]

-Te huur

Pagina: 1