Jaka jest różnica między tymi dwoma szablonami?Różnica między * i węzłem() w XSLT
<xsl:template match="node()">
<xsl:template match="*">
Jaka jest różnica między tymi dwoma szablonami?Różnica między * i węzłem() w XSLT
<xsl:template match="node()">
<xsl:template match="*">
<xsl:template match="node()">
jest skrótem:
<xsl:template match="child::node()">
Zastępuje typu węzła, który może być wybrany przez the child::
osi:
elementu
processing-instruction (PI) węzeł tekstowy węzeł
komentarz węzeł.
Z drugiej strony:
<xsl:template match="*">
jest skrótem od:
<xsl:template match="child::*">
To pasuje do dowolnego elementu.
Wyrażenie XPath: someAxis :: * pasuje do dowolnego węzła podstawowego typu węzła dla danej osi.
Dla osi child::
podstawowym typem węzła jest element.
odnoszą się także do XSL xsl:template match="/" dla innych wzorców dopasowania.
Żeby zilustrować jedną z różnic, a mianowicie, że *
nie pasuje text
:
Biorąc xml:
<A>
Text1
<B/>
Text2
</A>
Matching na 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>
Daje:
<root>
<node>
<A />
</node>
<node>
Text1
</node>
<node>
<B />
</node>
<node>
Text2
</node>
</root>
co następuje dopasowanie na *
:
<xsl:template match="*">
<star>
<xsl:copy />
</star>
<xsl:apply-templates />
</xsl:template>
nie pasuje do węzłów tekstowych.
<root>
<star>
<A />
</star>
<star>
<B />
</star>
</root>
Nie ma również "*" dopasowania węzłów komentarza, węzłów instrukcji przetwarzania, węzłów atrybutów, węzłów przestrzeni nazw i węzły dokumentu ... Wzorzec lub wyrażenie '*' (samo w sobie, jako abbr.dla 'child :: *') ** tylko zawsze pasuje do węzłów elementów i tylko węzłów elementów **. Używając '@ *', skrót od 'atrybut :: *', gwiazdka dopasowuje _only_ węzły atrybutu na osi atrybutu. – Abel
Ta odpowiedź ma również zastosowanie: http://stackoverflow.com/questions/5394178/difference-between-childnode-and-child – StuartLC