Potrzebuję węzła nadrzędnego dla węzła podrzędnego title 50
W tej chwili używam tylko
//*[title="50"]
Jak mogę zdobyć jego rodzica? Wynik powinien być store
węzłem.
<?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::*
skróconej składni..
(np//*[title="50"]/..
) lub zagnieżdżonego predykatu (na przykład://*[*[title="50"]]
)parent::node()
który odpowiada skrótowi..
i jest moim zdaniem lepszy. W rzeczywistościparent::*
ogranicza się do głównego typu węzła osi, co w większości przypadków nie stanowi problemu..xpath('..')
orxpath('parent::node()')
bicycle
a rodzic rodzica jeststore
? Czy wznosi się? Jeśli nie, to czy istnieje sposób na wejście w takich przypadkach i powrót,None
jeśli nie ma takiego rodzica?Jako alternatywę możesz użyć
ancestor
.Jest potężniejszy niż
parent
ten, który może dostać nawet dziadek lub pradziadekźródło
Możesz również użyć dwóch kropek na końcu wyrażenia. Zobacz ten przykład:
źródło
Nowa, ulepszona odpowiedź na stare, często zadawane pytanie ...
Użyj predykatu zamiast osi
parent::
lubancestor::
Większość odpowiedzi tutaj wybiera,
title
a następnie przechodzi do docelowegostore
elementu nadrzędnego lub przodka ( ). Prostszym, bezpośrednim podejściem jest bezpośrednie wybranie elementu nadrzędnego lub nadrzędnego, eliminując potrzebę przechodzenia do osi aparent::
lubancestor::
:Jeżeli występujące elementy różnią się nazwą:
Lub, z nazwy i dogłębności:
źródło
To działa w moim przypadku. Mam nadzieję, że potrafisz wydobyć z tego znaczenie.
źródło