Tengo el siguiente documento:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
¿Cómo puedo obtener el valor de <cc>
usar XPath si <bb>
es así zz
?
Tengo el siguiente documento:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
¿Cómo puedo obtener el valor de <cc>
usar XPath si <bb>
es así zz
?
Respuestas:
No estoy seguro de por qué todo el mundo está consultando por hermanos, también puede verificar los <bb/>
elementos que coincidan con el predicado del <a/>
predicado de:
//a[bb/text() = "zz"]/cc/text()
*-sibling
eje. +1 aunque.
Lo que necesita es el following-sibling
eje XPath
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Pruebe el Xpath aquí: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
P: ¿Cómo seleccionar un nodo usando XPath si el nodo hermano tiene un valor específico?
Debido a que solo hay "ejes XPath" para los hermanos siguientes y los hermanos anteriores, puede usar uno de ellos si la posición es fija.
Pero mejor:
busque cc
dónde el padre tiene un hijo bb
con valor 'zz'
:
//cc[../bb='zz']
//a[bb = 'zz']/cc
.
En primer lugar, su ejemplo no es XML bien formado. Pasando por alto eso y que no describió muy bien sus intenciones (¿Qué es exactamente lo que desea seleccionar en qué condición?), Supongo que desea hacer esto:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Selecciona
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
Podrías escribir también es como
//bb[text()="zz"]/following-sibling::cc/text()
Mire la especificación , tiene algunos ejemplos muy legibles de los que aprenderá mucho.
//a/cc[../bb='zz']/text()
// a: Selecciona todos los elementos 'a' sin importar dónde se encuentren.
// a / cc: Selecciona los elementos 'cc' que son hijos del elemento 'a' (sin importar dónde esté a).
..: Selecciona el padre del nodo actual.
[../bb='zz ']: donde el valor del elemento hermano' bb 'es zz.
Referencia: http://www.w3schools.com/xsl/xpath_syntax.asp
Otra solución para este problema es
//bb[contains(.,'zz')]/../cc/text()
Explicación : Cualquiera bb
que contenga una 'zz'
cadena en todos los nodos secundarios de bb
luego ir al nodo principal de ese bb
uso ..
, ahora que podemos acceder al cc
texto de retorno.
Espero que esa explicación no sea compleja.