tutorial texto secuencias recorrer ejemplo curso con buscar xml xpath

xml - texto - XPath encuentra todos los elementos con nodo hijo específico



xpath buscar texto (2)

¿Podría ayudarme a encontrar todos los elementos b que tienen el elemento secundario c en el siguiente ejemplo?

<a> <b name = "b1"></b> <b name = "b2"><c/></b> <b name = "b3"></b> </a>

La consulta xpath debe devolver el elemento b2

La segunda pregunta es si quiero combinar 2 condiciones: quiero obtener el elemento que tiene name = "b2" y tiene el elemento c pero esta sintaxis parece no funcionar: // b [@ name = ''b2'' yc]


Debería ser tan simple como

//b[c]

es decir, encuentre un b cualquier lugar que tenga un niño c .


Siempre que se conozca la estructura del documento XML, es mejor evitar usar el // pseudooperador XPath , ya que su uso puede dar lugar a una gran ineficacia (recorrido de todo el árbol de documentos).

Por lo tanto, recomiendo esta expresión XPath para el documento XML proporcionado:

/*/b[c]

Esto selecciona cualquier elemento b que sea secundario del elemento superior del documento XML y que tenga un elemento hijo llamado c .

ACTUALIZACIÓN : El OP hizo una segunda pregunta hace unos minutos:

La segunda pregunta es si quiero combinar 2 condiciones: quiero obtener el elemento que tiene name = "b2" y tiene el elemento c pero esta sintaxis parece no funcionar: //b[@name=''b2'' and c]

La expresión XPath proporcionada selecciona exactamente el elemento deseado.

Aquí está la verificación basada en XSLT :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/*"> <xsl:copy-of select="//b[@name=''b2'' and c]"/> </xsl:template> </xsl:stylesheet>

Cuando esta transformación se aplica en el documento XML proporcionado:

<a> <b name = "b1"></b> <b name = "b2"><c/></b> <b name = "b3"></b> </a>

la expresión XPath se evalúa y el elemento seleccionado correctamente se copia al resultado:

<b name="b2"> <c/> </b>