2015-11-06 51 views
0

我無法確認這種情況:XSL檢查是否有子節點,除了一個與此標記文本

<xsl:template match="//DIO[not(@NOPRINT) or (@NOPRINT != '1')]"........ 

<xsl:when test="./text()[. != '']"> 
    <tr> 
    <td > 
     <xsl:call-template name="someTemplate"/> 
    </td> 
    </tr> 
</xsl:when 

的XML是這樣的:

<Dokument> 
    <DIO>someText1</DIO> 
    <DIO NOPRINT="1">SomeNoPrintText</DIO> 
    <DIO> 
     <PODDIO NOPRINT="1"> 
      <ITEM>10.10.2010</ITEM> 
      <ITEM>10:10</ITEM> 
      <ITEM>11.11.2011</ITEM> 
      <ITEM>11:11</ITEM> 
     </PODDIO> 
     <PODDIO></PODDIO> 
    </DIO> 
    <DIO> 
     ..... 
    </DIO> 
</Dokument> 

現在,在xsl:當test =「CONDITION」時,我需要測試DIO節點是否包含任何文本(當前情況是這樣),但是我只需要從不具有NOPRINT = 1屬性的子節點進行測試。我怎麼做?

謝謝。

回答

0

你可以試試這個表達你的xsl:when

<xsl:when test=".//text()[not(ancestor::*/@NOPRINT='1')][normalize-space()]"> 

嚴格地說,這也將檢查當前DIO節點的祖先,不能低於它只是那些,但它可能滿足您的需求。

我也在這裏用normalize-space()忽略空白節點(儘管你也可以使用xsl:strip-space元素)。

請注意,您的模板匹配也可以簡化爲這樣:

<xsl:template match="//DIO[not(@NOPRINT = '1')]"> 

這是因爲@NOPRINT = 1只會評估爲true,如果存在於首位NOPRINT(和它等於1)。如果沒有這樣的屬性,表達式將是錯誤的,這就是你想要的。

相關問題