online - XPath para devolver la concatenación de cadenas de valores de nodo hijo calificados
xpath xml (6)
¿Puede alguien sugerir un formato de expresión XPath que devuelva un valor de cadena que contenga los valores concatenados de ciertos nodos secundarios calificados de un elemento, pero ignorando otros?
<div>
This text node should be returned.
<em>And the value of this element.</em>
And this.
<p>But this paragraph element should be ignored.</p>
</div>
El valor devuelto debe ser una sola cadena:
This text node should be returned. And the value of this element. And this.
¿Es esto posible en una sola expresión XPath?
Gracias.
Este look que funciona:
Usando como context /div/
:
text() | em/text()
O sin el uso de contexto:
/div/text() | /div/em/text()
Si desea concat las dos primeras cadenas, use esto:
concat(/div/text(), /div/em/text())
Si quieres todos los niños excepto p, puedes probar lo siguiente ...
string-join(//*[name() != ''p'']/text(), "")
que vuelve ...
This text node should be returned.
And the value of this element.
And this.
También puede usar un bucle para cada uno y ensamblar los valores en una variable como esta
<xsl:variable name="newstring">
<xsl:for-each select="/div//text()">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:variable>
En XPath 1.0:
Puedes usar
/div//text()[not(parent::p)]
Para capturar los nodos de texto deseados. La concatenación en sí no se puede hacer en XPath 1.0, recomiendo hacerlo en la aplicación host.
En XPath 2.0 :
string-join(/*/node()[not(self::p)], '''')
/div//text()
La barra doble obliga a extraer texto independientemente de los nodos intermedios