2015-06-10 33 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)]"/>