sacar - ¿Cómo devolver texto de varios elementos en una cadena usando XPath?
xpath expresiones regulares (2)
Me gustaría utilizar XPath para extraer todo el texto de todos los elementos <li>
, que están en la lista de listas especiales y devolver una cadena separada por espacios o comas. es posible?
Digamos que el DOM incluye el siguiente HTML:
<ul class="specialList">
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
</ul>
Salida deseada
one, two, three, four
O
one two three four
En XPath 1.0 , esto solo es posible si conoce el número de elementos por adelantado usando concat(...)
:
concat(//li[1], '', '', //li[2], '', '', //li[3], '', '', //li[4])
Si tiene suerte, puede simplemente devolver todas las cadenas de resultados para //li/text()
y establecer los parámetros de salida de su procesador XPath para concatenarlas como desee. Esto depende del procesador, por lo que no hay una solución general y esta no es una opción si desea seguir procesando los resultados dentro de XPath.
En XPath 2.0 , puede usar fn:string-join($sequence, $delemiter)
para la entrada de longitud arbitraria:
fn:string-join(//li, '', '')
Aunque esto es posible usando XSLT 1.0
<xsl:for-each select="ul/li">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>