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>