¿Cuál es la diferencia entre estas dos plantillas?Diferencia entre * y nodo() en XSLT
<xsl:template match="node()">
<xsl:template match="*">
¿Cuál es la diferencia entre estas dos plantillas?Diferencia entre * y nodo() en XSLT
<xsl:template match="node()">
<xsl:template match="*">
<xsl:template match="node()">
es una abreviatura para:
<xsl:template match="child::node()">
Esto coincide con cualquier tipo de nodo que puede ser seleccionado a través de the child::
eje:
elemento
texto-nodo
instrucción de procesamiento (PI) nodo
comentario nodo.
Por otro lado:
<xsl:template match="*">
es una abreviatura para:
<xsl:template match="child::*">
Coincide con cualquier elemento de.
Expresión de 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 elemento.
también se refieren a XSL xsl:template match="/" para otros patrones de partido.
Sólo para ilustrar una de las diferencias, a saber, que no coincide con *
text
:
XML en cuestión:
<A>
Text1
<B/>
Text2
</A>
devueltos localizados 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 juego 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>
El '' 'no coincide con nodos de comentario, nodos de instrucciones de procesamiento, nodos de atributo, nodos de espacio de nombres y nodos de documento ... El patrón o expresión '*' (en sí mismo, como abbr.para 'child :: *') ** solo coincide con nodos de elementos y nodos de elementos solo **. Cuando se usa '@ *', abreviatura de 'attribute :: *', el asterisco coincide con _only_ nodes de atributo en el eje del atributo. – Abel
Esta respuesta también es aplicable: http://stackoverflow.com/questions/5394178/difference-between-childnode-and-child – StuartLC