Ik heb het bovenliggende knooppunt nodig voor het onderliggende knooppunt title 50
Op dit moment gebruik ik alleen
//*[title="50"]
Hoe kan ik de ouder krijgen?
Het resultaat zou de store
node moeten zijn.
<?xml version="1.0" encoding="utf-8"?>
<d:data xmlns:d="defiant-namespace" d:mi="23">
<store d:mi="22">
<book price="12.99" d:price="Number" d:mi="4">
<title d:constr="String" d:mi="1">Sword of Honour</title>
<category d:constr="String" d:mi="2">fiction</category>
<author d:constr="String" d:mi="3">Evelyn Waugh</author>
</book>
<book price="8.99" d:price="Number" d:mi="9">
<title d:constr="String" d:mi="5">Moby Dick</title>
<category d:constr="String" d:mi="6">fiction</category>
<author d:constr="String" d:mi="7">Herman Melville</author>
<isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
</book>
<book price="8.95" d:price="Number" d:mi="13">
<title d:constr="String" d:mi="10">50</title>
<category d:constr="String" d:mi="11">reference</category>
<author d:constr="String" d:mi="12">Nigel Rees</author>
</book>
<book price="22.99" d:price="Number" d:mi="18">
<title d:constr="String" d:mi="14">The Lord of the Rings</title>
<category d:constr="String" d:mi="15">fiction</category>
<author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
<isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
</book>
<bicycle price="19.95" d:price="Number" d:mi="21">
<brand d:constr="String" d:mi="19">Cannondale</brand>
<color d:constr="String" d:mi="20">red</color>
</bicycle>
</store>
</d:data>
Antwoord 1, autoriteit 100%
Gebruik de parent
-assenmet de naam van het bovenliggende knooppunt .
//*[title="50"]/parent::store
Deze XPath selecteert alleen de bovenliggende node als het een store
is.
Maar u kunt ook een van deze gebruiken
//*[title="50"]/parent::*
//*[title="50"]/..
Deze xpaths selecteren elk bovenliggend knooppunt. Dus als het document verandert, selecteert u altijd een knooppunt, zelfs als het niet het knooppunt is dat u verwacht.
BEWERKEN
Wat gebeurt er in het gegeven voorbeeld waar de ouder een fiets is maar de ouder van de ouder een winkel?
Gaat het omhoog?
Nee, het selecteert alleen de winkel als het een ouder is van het knooppunt dat overeenkomt met //*[title="50"]
.
Zo niet, is er dan een methode om in dergelijke gevallen op te stijgen en Geen terug te geven als er geen ouder is?
Ja, u kunt ancestor
-assen
. gebruiken
//*[title="50"]/ancestor::store
Hiermee selecteert u alle voorouders van het knooppunt Matching //*[title="50"]
DAT ZIJN `WINKELS. B.g
<data xmlns:d="defiant-namespace" d:mi="23">
<store mi="1">
<store mi="22">
<book price="8.95" d:price="Number" d:mi="13">
<title d:constr="String" d:mi="10">50</title>
<category d:constr="String" d:mi="11">reference</category>
<author d:constr="String" d:mi="12">Nigel Rees</author>
</book>
</store>
</store>
</data>
Antwoord 2, Autoriteit 10%
Net als alternatief kunt u ancestor
gebruiken.
//*[title="50"]/ancestor::store
Het is krachtiger dan parent
Omdat het zelfs de grootouder of de grote grootouder van grootouder kan krijgen
Antwoord 3, Autoriteit 4%
U kunt de twee stippen ook aan het einde van de expressie gebruiken. Zie dit voorbeeld:
//*[title="50"]/..
Antwoord 4, Autoriteit 2%
Nieuw, verbeterd antwoord op een oude, veelgestelde vraag … sup>
Hoe kan ik zijn ouder krijgen? Resultaat zou de
store
Node moeten zijn.
Gebruik een predicaat in plaats van de parent::
of ancestor::
Axis
De meeste antwoorden hier selecteren de title
en gaan dan omhoog naar het beoogde ouder- of voorouderelement (store
). Een eenvoudigere, directe benadering is om het ouder- of voorouderelement rechtstreeks te selecteren, zodat het niet nodig is om naar een parent::
of ancestor::
assen te gaan:
//*[book/title = "50"]
Moeten de tussenliggende elementen in naam verschillen:
//*[*/title = "50"]
Of, in naam en diepte:
//*[.//title = "50"]
Antwoord 5
Dit werkt in mijn geval. Ik hoop dat je er betekenis uit kunt halen.
//div[text()='building1' and @class='wrap']/ancestor::tr/td/div/div[@class='x-grid-row-checker']