模板匹配和测试之间是否存在语法差异?

时间:2015-04-23 09:57:20

标签: xslt

我目前正在尝试改进代码,但我遇到了这个问题:

<xsl:template match="activator">
    <xsl:if test="not(ancestor::repeater)">
        Test1
    </xsl:if> 
</xsl:template>

因为似乎没有必要我替换它:

<xsl:template match="activator[not(ancestor::repeater)]">
    Test2
</xsl:template>

我用

测试了它
<?xml version="1.0" encoding="UTF-8"?>
<repeater>
    <activator>
        <text>
            <string>T_Auswahl</string>
        </text>
    </activator>
</repeater>

但它现在没有匹配,我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:1)

这并没有按照要求回答您的问题,但可能很重要:

带谓词的模板,例如:

<xsl:template match="sigma[not(ancestor::alpha)]">

满足谓词的节点不匹配,例如/root/beta/lambda/omega。如果您没有与此类节点匹配的其他模板,则会将内置模板规则应用于它们 - 从而导致可能不需要地将文本节点复制到输出树。