身份模板如下所示:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:apply-templates select="@*|node()" />
选择的内容超过<xsl:apply-templates />
,或者身份模板是否可以这样?
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
执行以下操作时究竟选择了什么?
<xsl:apply-templates />
答案 0 :(得分:17)
<xsl:apply-templates select="@*|node()" />
选择的内容是否超过<xsl:apply-templates />
,或身份模板可以 像这样?
<xsl:apply-templates/>
相当于:
<xsl:apply-templates select="node()"/>
这是一个较短的前者:
<xsl:apply-templates select="child::node()"/>
这相当于:
<xsl:apply-templates select="* | text() | comment() | processing-instruction()"/>
正如我们从上一条指令中看到的那样,您要询问的xsl:apply-templates
指令没有选择任何属性,因此它不能用作以下的简写:
<xsl:apply-templates select="@*|node()"/>
答案 1 :(得分:4)
<xsl:apply-templates/>
的默认选择仅为"node()"
,不包含属性。
答案 2 :(得分:1)
default selection of apply-templates为node()
,是child::node()
的简写。此XPath表达式的计算方法如下:
因此,对于<xsl:apply-templates />
,将应用子元素的模板,但不应用于属性。如果是复制模板,这意味着不会复制属性。