J'ai besoin d'obtenir le nœud parent du nœud enfant title 50
Pour le moment, je n'utilise que
//*[title="50"]
Comment pourrais-je avoir son parent? Le résultat doit être le store
nœud.
<?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>
parent::*
syntaxe abrégée..
(exemple://*[title="50"]/..
) ou un prédicat imbriqué (exemple://*[*[title="50"]]
)parent::node()
qui correspond au raccourci..
et qui est mieux à mon avis. En fait,parent::*
se limite au type de nœud principal de l'axe ce qui dans la plupart des cas ne pose pas de problème..xpath('..')
orxpath('parent::node()')
bicycle
mais que le parent du parent eststore
? Est-ce qu'il monte? Sinon, y a-t-il une méthode pour remonter dans de tels cas et revenir en l'None
absence d'un tel parent?Juste comme alternative, vous pouvez utiliser
ancestor
.C'est plus puissant que
parent
car il peut même obtenir le grand-parent ou l'arrière-arrière-grand-parentla source
Vous pouvez également utiliser les deux points à la fin de l'expression. Voir cet exemple:
la source
Nouvelle réponse améliorée à une ancienne question fréquemment posée ...
Utilisez un prédicat plutôt que l' axe
parent::
ouancestor::
La plupart des réponses ici sélectionnent le
title
, puis remontent jusqu'à l'store
élément parent ou ancestor ( ) ciblé . Une approche plus simple et directe consiste à sélectionner l'élément parent ou ancêtre directement en premier lieu, évitant ainsi d'avoir à parcourir les axes aparent::
ouancestor::
:Si le nom des éléments intermédiaires varie:
Ou, en nom et en profondeur:
la source
Cela fonctionne dans mon cas. J'espère que vous pourrez en tirer un sens.
la source