2011-12-16 71 views
2

這是我的Xml文檔(小snippt)。如何使用xslt 2.0檢查所有後代:: w:p是否具有當前節點的w:r/w:t子項?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
<w:body> 
<w:p> <!-- Current Node --> 
    <w:r> 
     <w:pict> 
      <w:shape> 
       <w:txbxContent> 
        <w:p> 
         <w:r> 
          <w:t>Table 11: Tanjavur NREGS activities 
          </w:t> 
         </w:r> 
        </w:p> 

        <w:p/> 
       </w:txbxContent> 
      </w:shape> 
     </w:pict> 
    </w:r> 
    <w:r> 
     <w:t>CHAPTER IV: Findings and analysis 
     </w:t> 
    </w:r> 
</w:p> 

</w:body> 
</w:document> 

現在只是假設,<w:p>是我目前的處理Node.Now,在這裏,我想用測試一個條件。我的條件是,

如果(當前處理節點)有一個以上的後裔<w:p>具有孩子<w:r><w:t>那麼只有我必須執行內部<w:when>一些功能。

現在我測試等,

<xsl:choose> 
     <xsl:when test="descendant::w:p[2]"> 

       <!-- here i have to perform some work -->     
     </xsl:when> 
     <xsl:otherwise> 
     </xsl:otherwise> 
    </xsl:choose> 

以我以上XML文檔,具有兩個後代<w:p>當前處理節點。但是,只有一個<w:p>後裔<w:r><w:t>孩子。另一個後裔<w:p>是無。

但我上面的xslt條件是真的這種情況。如何檢查兩個後裔是否有<w:r><w:t>孩子。

請指引我走出這個問題...

回答

2

使用

<xsl:when test="count(descendant::w:p[w:r/w:t]) > 1"> 

不止一個後代<w:p>具有當前節點子<w:r><w:t>

要求翻譯爲XPath:

  • 擁有後代<w:p> - >descendant::w:p
  • <w:p>有一個孩子<w:r>有一個孩子<w:t> - >w:p[w:r/w:t]
  • 有這樣的後代不止一個 - >count(...) > 1
+0

::非常感謝您的回答。它工作良好。 – Saravanan 2011-12-16 11:57:46

+0

+1 - 更明確的方法。 – 2011-12-16 19:31:09

2

如果它(當前處理節點)有一個以上的子孫<w:p> 有孩子<w:r><w:t>那麼只有我必須執行一些 功能在<w:when>內。

更有效的解決方案:使用作爲條件指令,或者,的test屬性更好爲匹配百通的謂詞:

descendant::w:p[w:r/w:t][2] 

上述表達式是true()只有當上下文節點至少有兩個w:p後代,這樣每個人都有一個w:r孩子,孩子本身就有一個孩子w:t

相關問題