2015-06-10 32 views
0

的我有下面的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节点()。但我的输出是目前

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

except运营商基本上设置的差异,X except Y给你所有在集合X,而不是在集合Y的节点。在你的情况下,你的“X”是一组文本节点,你的“Y”是一组的元素节点,所以它不会排除任何东西。如果你想要除了在fn之内的所有后代文本节点,你可以说

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