鉴于XML
<blockquote>
<attribution>foo</attribution>
<para>bar</para>
</blockquote>
我有XSL模板
<xsl:template match="dbk:blockquote">
<blockquote>
<xsl:apply-templates select="*[not(dbk:attribution)]" />
<xsl:apply-templates select="dbk:attribution" />
</blockquote>
</xsl:template>
其中第一个apply-templates
应选择dbk:blockquote
中不属于dbk:attribution
类型的所有子元素。 (这是将归因移到底部的必要条件。)
但是,它实际上匹配每个节点。为什么呢?
答案 0 :(得分:7)
您想使用self
轴:
<xsl:apply-templates select="*[not(self::dbk:attribution)]" />
这将选择不是自身的子元素 dbk:attribution
元素。您的版本选择不包含 dbk:attribution
子项的子元素。
答案 1 :(得分:0)
我不是xpath专家。但我认为这应该有用。
<xsl:template match="dbk:blockquote">
<blockquote>
<xsl:apply-templates select="*[local-name(.) != 'attribution']" />
<xsl:apply-templates select="*[local-name(.) = 'attribution']" />
</blockquote>
</xsl:template>