Preciso obter o nó pai para o nó filho title 50
No momento estou usando apenas
//*[title="50"]
Como eu consegui o pai? O resultado deve ser o store
nó.
<?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::*
sintaxe abreviada..
(exemplo://*[title="50"]/..
) ou um predicado aninhado (exemplo://*[*[title="50"]]
)parent::node()
que corresponde ao atalho..
e é melhor na minha opinião. De fato,parent::*
é limitado ao tipo de nó principal do eixo, que na maioria dos casos não é um problema..xpath('..')
ouxpath('parent::node()')
bicycle
mas o pai estástore
? Subida? Caso contrário, existe um método para subir em tais casos e retornarNone
se não houver tal pai?Apenas como uma alternativa, você pode usar
ancestor
.É mais poderoso do que
parent
já que pode receber até avós ou bisavósfonte
Você também pode usar os dois pontos no final da expressão. Veja este exemplo:
fonte
Resposta nova e aprimorada para uma antiga pergunta freqüente ...
Use um predicado em vez do eixo
parent::
ouancestor::
A maioria das respostas aqui seleciona o elemento
title
e, em seguida, percorre o elemento pai ou ancestral (store
). Uma abordagem mais simples e direta é selecionar o elemento pai ou ancestral diretamente em primeiro lugar, evitando a necessidade de passar para umparent::
ouancestor::
eixos:Os elementos intervenientes devem variar em nome:
Ou, em nome e profundidade:
fonte
Isso funciona no meu caso. Espero que você possa extrair significado disso.
fonte