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()
*-siblingeje. +1 aunque.
Lo que necesita es el following-siblingeje 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 ccdónde el padre tiene un hijo bbcon 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 bbque contenga una 'zz'cadena en todos los nodos secundarios de bbluego ir al nodo principal de ese bbuso .., ahora que podemos acceder al cctexto de retorno.
Espero que esa explicación no sea compleja.