What is the default select of XSLT apply-templates?

≡放荡痞女 提交于 2019-11-29 09:21:07

Does <xsl:apply-templates select="@*|node()" /> select more than <xsl:apply-templates />, or could the identity template have been like this?

<xsl:apply-templates/> 

is equivalent to:

<xsl:apply-templates select="node()"/>

and this is a shorter former of:

<xsl:apply-templates select="child::node()"/>

and this is a equivalent to:

<xsl:apply-templates select="* | text() | comment() | processing-instruction()"/>

As we see from the last instruction, the xsl:apply-templates instruction you are asking about, doesn't select any attributes, therefore it cannot be used as a shorthand for:

<xsl:apply-templates select="@*|node()"/>

The default select for <xsl:apply-templates/> is just "node()", it doesn't include attributes.

The default selection of apply-templates is node(), which is shorthand for child::node(). This XPath expressions is evaluated as follows:

  • First, all nodes from the "child" axis are taken. This are all the direct children of the current element, i.e. other elements, text, and comments, but not the attributes.
  • Then this node set is filtered with the node test "node()". In this case, no elements are filtered because that test matches everything.

So with <xsl:apply-templates />, templates for the child elements are applied but not for the attributes. In case of the copy template this would mean that the attributes are not copied.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!