XPath表达式,用于选择不是某些特定元素的所有子元素

jam*_*her 1 xslt xpath

鉴于XML

<blockquote>
    <attribution>foo</attribution>
    <para>bar</para>
</blockquote>
Run Code Online (Sandbox Code Playgroud)

我有XSL模板

<xsl:template match="dbk:blockquote">
    <blockquote>
        <xsl:apply-templates select="*[not(dbk:attribution)]" />
        <xsl:apply-templates select="dbk:attribution" />
    </blockquote>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

第一个apply-templates应该选择dbk:blockquote不属于类型的所有子元素dbk:attribution.(这是将归因移到底部的必要条件.)

但是,它实际上匹配每个节点.为什么?

Way*_*ett 7

您想要使用self轴:

<xsl:apply-templates select="*[not(self::dbk:attribution)]" />
Run Code Online (Sandbox Code Playgroud)

这将选择本身不是dbk:attribution元素的子元素.你的版本选择不子元素包含一个dbk:attribution孩子.