me gustaría quitar las etiquetas que contienen sólo espacio en blanco/salto de línea/tab caracteres, como a continuación:XPath/XSLT eliminar etiquetas vacías
<p> </p>
¿Cómo hacer esto usando funciones XPath y XSLT plantillas?
me gustaría quitar las etiquetas que contienen sólo espacio en blanco/salto de línea/tab caracteres, como a continuación:XPath/XSLT eliminar etiquetas vacías
<p> </p>
¿Cómo hacer esto usando funciones XPath y XSLT plantillas?
Esta transformación (anulando la identity rule):
<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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(*) and not(text()[normalize-space()])]"/>
</xsl:stylesheet>
cuando se aplica al siguiente documento XML:
<t>
<a>
<b>
<c/>
</b>
</a>
<p></p>
<p> </p>
<p>Text</p>
</t>
produce correctamente el resultado deseado:
<t>
<a>
<b/>
</a>
<p>Text</p>
</t>
Recuerde: El uso y la anulación de la regla/plantilla de identidad es el patrón de diseño XSLT más fundamental y potente. Es la elección ideal para una variedad de problemas en los que la mayoría de los nodos se van a copiar sin cambios y sólo algunos nodos específicos necesitan ser alterado, borrado, renombrado, ..., etc.
Nota: @Abel en su comentario recomienda que algunas partes de esta solución tienen que estar más lejos explicó:
para los no iniciados o curiosos:
not(*)
medios: no tener un hijo elemento;not(text()[normalize-space()])
significa: no tener un nodo de texto con texto que no sea de espacio en blanco.
Para los no iniciados o curiosos: 'not (*)' significa: no tener un elemento hijo; 'not (text() [normalize-space()])' significa: no tener un nodo de texto con texto. – Abel
@Abel: Gracias, explicaré esto en la respuesta. –
Eso es genial, gracias Dimitre. Todavía soy un principiante con XSLT y sigo encontrando cosas como esta que hacen que te vuelvas loco. Creo que necesito encontrar un buen libro. Gracias de nuevo por la asombrosa explicación, SO necesita más de esto. – Kyle
Buena pregunta, +1. Es posible producir correctamente el resultado deseado utilizando el patrón de diseño XSLT más fundamental y potente: anulando la regla de identidad. –