我有以下XML
<p>
<b>Chapter 3: Industrial Drawings</b>
<fn>
<fnn>11</fnn>
<fnt>
<p>fnt 1</p>
</fnt>
</fn>
<b>and Designs</b>
</p>
我正在使用以下行,我正在p
<xsl:template match ="p">
<xsl:value-of select="descendant-or-self::*/text() except descendant::fn"/>
</xsl:template>
这里我试图获取p
的内容并忽略fn
node()。但我的输出目前是
Chapter 3: Industrial Drawings11fnt 1and Designs
但预计是
Chapter 3: Industrial Drawings and Designs
这里我使用的是descendant-or-self::*/text()
,因为可能会出现以下情况。
p/b/text()
p/b/c/text()
p/i/c/text() etc...
我只想忽略fn
并打印文本()。请让我知道我该怎么做。
答案 0 :(得分:0)
except
运算符基本上设置为差异,X except Y
为您提供集合X中的所有节点而不是集合Y.在您的情况下,“X”是一组文本节点和你的“Y”是一组元素节点,所以它不会排除任何东西。如果您想要所有后代文本节点,除了某些fn
内的文本节点,您可以说
<xsl:value-of select=".//text()[not(ancestor::fn)]"/>