XmlStarlet meerdere condities?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
Hoe kan ik ALLEEN de bestanden achterhalen die voldoen aan een bepaalde conditie met xmlstarlet?

xml sel -t -m "//Person[@Age=20] | //Address[@City=Amsterdam]" -v "@Age" -n -v "@City" -n

----------------------------------------
Resultaat 1:
----------------------------------------
20
Amsterdam
----------------------------------------
Resultaat 2:
----------------------------------------
20
----------------------------------------
Resultaat 3:
----------------------------------------
Amsterdam
----------------------------------------


Dit geeft de resultaten weer alleen doet het niet precies wat ik wil. Hoe kan ik complexe condities uitvoeren en alleen de bestandsnaam teruggeven op het moment dat BEIDE condities TRUE zijn?

xml sel -t -m "//Person[@Age=20 and @City=Amsterdam]" -v "@Age" -n -v "@City" -n


Bovenstaande werkt niet omdat @City geen attribute is van Person maar van Address (doet even niet terzake of Address een sub-node is of op een hoger niveau staat). Het gaat meer om het idee hoe hier mee om te gaan.

Voorbeeld:
(Conditie_1 == TRUE AND Contitie_2 == TRUE) OR (CONDITIE_3 == TRUE)

Is dit in XPath / XmlStarlet mogelijk?

PSN: Norfirin


Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:15
Tony L schreef op zaterdag 16 april 2011 @ 00:08:
xml sel -t -m "//Person[@Age=20 and @City=Amsterdam]" -v "@Age" -n -v "@City" -n


Bovenstaande werkt niet omdat @City geen attribute is van Person maar van Address (doet even niet terzake of Address een sub-node is of op een hoger niveau staat). Het gaat meer om het idee hoe hier mee om te gaan.
Ik snap niet helemaal wat je bedoelt met bestandsnamen, maar als je personen wilt hebben die 20 jaar oud zijn en in Amsterdam wonen, maakt het juist wel uit of address een child of parent node is, omdat je dat in de expressie moet gebruiken.

<person age="20" naam="piet"> <address city="Amsterdam"/> </person>
xpath: //person[@age=20 and address[@city='Amsterdam']]

<address city="Amsterdam"> <person age="20" naam="jan"/> </address>
xpath: //person[@age=20 and parent::address[@city='Amsterdam']]

Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
matthijsln schreef op zaterdag 16 april 2011 @ 15:13:
[...]
<person age="20" naam="piet"> <address city="Amsterdam"/> </person>
xpath: //person[@age=20 and address[@city='Amsterdam']]

<address city="Amsterdam"> <person age="20" naam="jan"/> </address>
xpath: //person[@age=20 and parent::address[@city='Amsterdam']]
Thanks!! Ik ben er achter gekomen dat je ook het volgende kan doen:


xpath: //person[@age=20 and //Address[@City='Amsterdam']]


Dat is wat handiger omdat je dan ook niet geneste structuren kan gebruiken.

Nogmaals bedankt!

PSN: Norfirin


Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:15
Ik snap nog steeds niet helemaal wat je nou wilt, want nu selecteer je alle personen van 20 jaar als er ook maar één Address node ergens in het document is met 'Amsterdam' als City attribuut. Ook als dat dus niks met de betreffende persoon te maken heeft.

Het punt van geneste structuren is juist dat je zo de relaties van elementen aangeeft.

Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
matthijsln schreef op maandag 18 april 2011 @ 12:28:
Ik snap nog steeds niet helemaal wat je nou wilt, want nu selecteer je alle personen van 20 jaar als er ook maar één Address node ergens in het document is met 'Amsterdam' als City attribuut. Ook als dat dus niks met de betreffende persoon te maken heeft.
Klopt, dit is ook precies wat ik nodig heb ;)
Het attribuut waar ik opzoek is namelijk uniek in het gehele document. Echter de structuur is niet overal hetzelfde (nadeel van meerdere revisies). Daarom dat ik beter kan controleren of het attribuut überhaupt voorkomt i.p.v. de precieze structuur wáár het moet voorkomen.
matthijsln schreef op maandag 18 april 2011 @ 12:28:
Het punt van geneste structuren is juist dat je zo de relaties van elementen aangeeft.
Juist, alleen in dit geval heb ik dat niet nodig. Mijn excuses voor de vaagheid maar ik ben enorm blij dat ik weer verder kan :)

PSN: Norfirin