[XSLT] Xpath query -

Pagina: 1
Acties:

  • Sardaukar
  • Registratie: Januari 2003
  • Laatst online: 21:49
Hallo allemaal,

Na een lange tijd lurken kom ik hier toch maar eens aan de oppervlakte. Kijken of iemand mij met onderstaand probleem kan helpen.

Probleem: Ik heb de volgende XML-structuur

XML:
1
2
3
4
5
<root>
  <category id="1" />
  <category id="2" />
  <category id="3"/>
</root>


Nu wil ik met een XPath-query een bepaald category-element selecteren, dus iets in de trend van

XSLT:
1
/root/category[@id=1]


Dit werkt, maar levert me alleen een category-element op. Ik wil dit eigenlijk retour hebben inclusief root-element. Zo dus:

XML:
1
2
3
<root>
  <category id="1" />
</root>


Ik heb in XSLT al zitten kijken naar de mogelijkheden met de axis, maar ik kom er niet uit. Als je namelijk de parent selecteert en dus terugspringt naar de root worden automatisch ook de children (alle category-elementen) weer geselecteerd.

Kan iemand me in de juiste richting wijzen? (En ja, uiteraard kan ik dit via een XSLT zelf wel oplossen, maar ik ben echt benieuwd of het via een enkele XPath query te doen is).

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20:19

Gerco

Professional Newbie

Als ik je goed begrijp kan het niet, want een XPath query heeft altijd 1 node(set) als resultaat en dus niet meerdere verschillende nodesets. Wat ik me wel afvraag... waarom wil je dit precies doen? Dit lijkt me juist een klusje voor een transformatie en niet voor een XPath expressie.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Sardaukar
  • Registratie: Januari 2003
  • Laatst online: 21:49
Gerco schreef op donderdag 28 juni 2007 @ 10:21:
Als ik je goed begrijp kan het niet, want een XPath query heeft altijd 1 node(set) als resultaat en dus niet meerdere verschillende nodesets. Wat ik me wel afvraag... waarom wil je dit precies doen? Dit lijkt me juist een klusje voor een transformatie en niet voor een XPath expressie.
Ik ben redelijk onbekend met XPath en ik had het idee dat door middel van de axis instellingen (ancestor, parent, etc) het wel mogelijk was. Mijn vraag moet je dus eigenlijk zien als: is het mogelijk?

Ondertussen ben ik het zelf al aan het uitwerken door middel van een transformatie. Dit gaat ook wel, maar ik vind het veel werk voor het toevoegen van een enkele root-node.

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Waarom moet je precies terug naar je parent? Wil je gegevens van je parent ophalen? Of wil je iets anders doen?

Skill is when luck becomes a habit.


  • Sardaukar
  • Registratie: Januari 2003
  • Laatst online: 21:49
eek schreef op donderdag 28 juni 2007 @ 10:33:
Waarom moet je precies terug naar je parent? Wil je gegevens van je parent ophalen? Of wil je iets anders doen?
Nee, ik wil een subselectie toepassen. Dus de oorspronkelijke xml van 4 category-elementen terugbrengen naar 1 category-element.

Verderop in de software zijn er namelijk nog andere XSLT's of queries die verwachten dat het document volgens de structuur <root><category> is opgebouwd. Ik kan niet zomaar een document zonder het <root> element doorgeven (is dan trouwens ook geen geldige XML meer).

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Bah... Ben echt nog niet wakker. Snap nu pas dat je deze node weer ergens aan mee wilt geven. Misschien dat je hier iets aan hebt:
http://lists.webjunction.org/wjlists/xml4lib/2006-October/005807.html

[ Voor 106% gewijzigd door eek op 28-06-2007 11:04 ]

Skill is when luck becomes a habit.


  • Sardaukar
  • Registratie: Januari 2003
  • Laatst online: 21:49
Nee, parent node is verder leeg. Maar als je het over een xsl-statement heb zitten we al buiten de scope: namelijk kijken of het via een XPath query gaat.

Ondertussen takkel ik het al via een XSLT. Ietwat meer werk, maar gaat op zich wel goed. Toch nog wel eens een performance-test doen.... :)

  • Sendy
  • Registratie: September 2001
  • Niet online
In XSLT 1 is dit niet mogelijk. Je kan namelijk geen aangepaste nodesets (ook wel tree fragment genoemd) maken (en de node met <root> en een enkele <category> is anders dan de oorspronkelijke (wat Gerco ook zegt eigenlijk.) In XSLT 2 kan je wel direct met tree fragments stoeien; ook al kan het daar niet via XPath zoals jij zou willen. Het blijft een functie van XSLT.

  • Sardaukar
  • Registratie: Januari 2003
  • Laatst online: 21:49
Sendy schreef op donderdag 28 juni 2007 @ 10:56:
In XSLT 1 is dit niet mogelijk. Je kan namelijk geen aangepaste nodesets (ook wel tree fragment genoemt) maken (en de node met <root> en een enkele <category> is anders dan de oorspronkelijke (wat Gerco ook zegt eigenlijk.) In XSLT 2 kan je wel direct met tree fragments stoeien; ook al kan het daar niet via XPath zoals jij zou willen. Het blijft een functie van XSLT.
Dat bevestigt mijn vermoeden al - iedereen bedankt voor de antwoorden.

[ Voor 1% gewijzigd door Sardaukar op 28-06-2007 11:01 . Reden: Credit where credit is due ]

Pagina: 1