Necesito obtener el nodo primario para el nodo secundario title 50
Por el momento solo estoy usando
//*[title="50"]
¿Cómo podría obtener su padre? El resultado debe ser el store
nodo.
<?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::*
sintaxis abreviada..
(ejemplo://*[title="50"]/..
) o un predicado anidado (ejemplo://*[*[title="50"]]
)parent::node()
que corresponde al atajo..
y es mejor en mi opinión. De hecho,parent::*
se limita al tipo de nodo principal del eje, que en la mayoría de los casos no es un problema..xpath('..')
oxpath('parent::node()')
bicycle
pero el padre del padre esstore
? ¿Asciende? Si no es así, ¿hay algún método para ascender en tales casos y regresarNone
si no existe tal padre?Solo como alternativa, puedes usar
ancestor
.Es más poderoso que
parent
ya que puede llegar incluso al abuelo o al tatarabuelofuente
También puedes usar los dos puntos al final de la expresión. Ver este ejemplo:
fuente
Respuesta nueva y mejorada a una vieja pregunta frecuente ...
Use un predicado en lugar del eje
parent::
oancestor::
La mayoría de las respuestas aquí seleccionan
title
y luego atraviesan el elemento padre o ancestro (store
) objetivo . Un enfoque más simple, directa es seleccionar padre o ancestro elemento directamente en el primer lugar, obviando la necesidad de recorrer a unaparent::
oancestor::
ejes:Si los elementos que intervienen varían en nombre:
O, en nombre y profundidad:
fuente
Esto funciona en mi caso. Espero que puedas extraer significado de ello.
fuente