xsl values template example content templates xslt matching

templates - template - xsl values of



Diferencia entre*y node() en XSLT (3)

¿Cuál es la diferencia entre estas dos plantillas?

<xsl:template match="node()"> <xsl:template match="*">


Solo para ilustrar una de las diferencias, a saber que * no coincide con el text :

Dado xml:

<A> Text1 <B/> Text2 </A>

Coincidencia en node()

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> <!--Suppress unmatched text--> <xsl:template match="text()" /> <xsl:template match="/"> <root> <xsl:apply-templates /> </root> </xsl:template> <xsl:template match="node()"> <node> <xsl:copy /> </node> <xsl:apply-templates /> </xsl:template> </xsl:stylesheet>

Da:

<root> <node> <A /> </node> <node> Text1 </node> <node> <B /> </node> <node> Text2 </node> </root>

Mientras que coincide en * :

<xsl:template match="*"> <star> <xsl:copy /> </star> <xsl:apply-templates /> </xsl:template>

No coincide con los nodos de texto.

<root> <star> <A /> </star> <star> <B /> </star> </root>



<xsl:template match="node()">

es una abreviatura de:

<xsl:template match="child::node()">

Esto coincide con cualquier tipo de nodo que se puede seleccionar a través the child:: eje the child::

  • elemento

  • nodo de texto

  • nodo de instrucción de procesamiento (PI)

  • nodo de comentario

En el otro lado :

<xsl:template match="*">

es una abreviatura de:

<xsl:template match="child::*">

Esto coincide con cualquier elemento .

La expresión XPath: someAxis :: * coincide con cualquier nodo del tipo de nodo primario para el eje dado.

Para el eje child:: el tipo de nodo primario es un elemento .