Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 选择忽略一种类型的子项的值_Xslt - Fatal编程技术网

Xslt 选择忽略一种类型的子项的值

Xslt 选择忽略一种类型的子项的值,xslt,Xslt,我有下面的XML <p> <b>Chapter 3: Industrial Drawings</b> <fn> <fnn>11</fnn> <fnt> <p>fnt 1</p> </fnt> </fn> <b>

我有下面的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
的内容,并忽略
fn
node()。但我目前的输出是

Chapter 3: Industrial Drawings11fnt 1and Designs
但这是意料之中的

Chapter 3: Industrial Drawings and Designs
这里我使用的是
后代或self::*/text()
,因为可能有很多类似下面的情况

p/b/text()
p/b/c/text()
p/i/c/text() etc...

我只想忽略
fn
并打印文本()。请告诉我怎么做。

除操作符基本上是set-difference,
X除Y
给出了集合X中的所有节点,而不是集合Y中的所有节点。在您的情况下,“X”是一组文本节点,“Y”是一组元素节点,因此它不会排除任何内容。如果您想要所有子体文本节点,除了那些位于某些
fn
中的节点,您可以说

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

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