select的值忽略一种类型的孩子

时间:2015-06-10 15:27:16

标签: xslt

我有以下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并打印文本()。请让我知道我该怎么做。

1 个答案:

答案 0 :(得分:0)

except运算符基本上设置为差异,X except Y为您提供集合X中的所有节点而不是集合Y.在您的情况下,“X”是一组文本节点和你的“Y”是一组元素节点,所以它不会排除任何东西。如果您想要所有后代文本节点,除了某些fn内的文本节点,您可以说

<xsl:value-of select=".//text()[not(ancestor::fn)]"/>