根节点的xslt默认模板混淆

时间:2018-09-13 07:15:46

标签: xslt pattern-matching default

xslt中的默认模板之一是:

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

为什么匹配模式包含根节点“ /”的表达式?星号“ *”是否已捕获文档中的所有节点?

我试图将其省略,没有区别。跟随xslt

<xsl:stylesheet 
     version="2.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xhtml" indent="yes"/>

    <xsl:template match="*">
        <xsl:value-of select="./name()"/>
        <xsl:apply-templates/>
    </xsl:template>

</xsl:stylesheet>

及以下xml

<?xml version="1.0" encoding="UTF-8"?>

<a>
    <b>
    </b>
</a>

产生输出:

<?xml version="1.0" encoding="UTF-8"?>a
b

因此,根节点a被捕获了。

1 个答案:

答案 0 :(得分:0)

由于位置路径的默认轴为child,因此*|/只是child::*|/的缩写。 child::*与文档的根节点不匹配,仅与它的子节点不匹配。