为什么<xsl:apply-templates>输出所有祖先标记的值

时间:2015-10-16 14:47:34

标签: xml xslt

据我所知,XPath表达式&#34; /&#34;应将节点上下文设置为根节点的子轴。这是xml:

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

<test-case name="test-case-1">
    <object-under-test category="template" name="text-align"/>
    <parameters>
        <input name="text">text</input>
        <input name="min-lenght">8</input>
        <input name="align">left</input>
        <output name="result"/>
    </parameters>
    <criteria>
        <criterion class="equal" to="'text '"/>
    </criteria>
</test-case>

</xsl:stylesheet>

这是xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
    <test>
        <xsl:apply-templates/>
    </test>
</xsl:template>
</xsl:stylesheet>

<xsl:apply-templates>的默认匹配模式是什么? 为什么我得到所有标签的值作为输出?

这是输出:

<?xml version="1.0" encoding="UTF-8"?>
<test>text 8 left</test>

1 个答案:

答案 0 :(得分:4)

  

据我所知,XPath表达式&#34; /&#34;应该设置节点上下文   到根节点的子轴。

不,它将上下文设置为/根节点本身。

  

<xsl:apply-templates>的默认匹配模式是什么?

&#34; 如果没有select属性,xsl:apply-templates指令将处理当前节点的所有子节点。&#34; http://www.w3.org/TR/xslt/#section-Applying-Template-Rules

  

为什么我将所有标签的值作为输出?

这是因为当样式表没有与您应用模板的节点相匹配的模板时应用的built-in template rules。简而言之,内置模板会将所有后代文本节点复制到输出中。