2011-11-04 128 views
0

這是我的xml文檔。如何獲取xslt2.0中特定節點的下一個緊接的下一個兄弟節點?

<w:document xmlns:w="w"> 

     <w:body> 
       <w:p> 
     <w:pPr><w:pStyle w:val="Heading1"/></w:pPr> 
     <w:r><w:t>Tables</w:t></w:r> <!-- Assume Current Node here --> 
        </w:p> 
        <w:tbl> 
         <w:tr> 
           <w:tc> 
            <w:p> 
       <w:r><w:t>row1col</w:t></w:r> 
             </w:p> 
            </w:tc> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row1co2</w:t></w:r> 
             </w:p> 
            </w:tc> 
          </w:tr> 

    <w:tr> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row2col1</w:t></w:r> 
             </w:p> 
            </w:tc> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row2col2</w:t></w:r> 
             </w:p> 
            </w:tc> 
          </w:tr> 
       </w:tbl> 

       <w:p> 
     <w:pPr><w:pStyle w:val="Normal"/></w:pPr> 
     <w:r><w:t>2nd table</w:t></w:r> 
        </w:p>   

      <w:tbl> 
         <w:tr> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row11col11</w:t></w:r> 
             </w:p> 
            </w:tc> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row11co12</w:t></w:r> 
             </w:p> 
            </w:tc> 
          </w:tr> 
     <w:tr> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row12col11</w:t></w:r> 
             </w:p> 
            </w:tc> 
           <w:tc> 
            <w:p> 
             <w:r><w:t>row12col12</w:t></w:r> 
             </w:p> 
            </w:tc> 
          </w:tr> 
       </w:tbl> 
</w:body> 
</w:document> 

所以,我想將這個XML文件轉換爲給定的格式。

<Document> 
<Heading1> 
<title>Tables</title> 
<table> 
    <paragraph>row1col1</paragraph> 
    <paragraph>row1col2</paragraph> 
    <paragraph>row2col1</paragraph> 
    <paragraph>row2col2</paragraph> 
</table> 
<paragraph>2nd Table</paragraph> 
<table> 
    <paragraph>row11col11</paragraph> 
    <paragraph>row11col12</paragraph> 
    <paragraph>row12col11</paragraph> 
    <paragraph>row12col12</paragraph> 
</table> 
</Heading1> 
</Document> 

除了下面提到case.Assume我已經做了幾乎做了一切,現在當前節點是第一<w:p>(在XML文檔中提到的)。所以,爲獲得表中的項目,我喜歡編碼

<xsl:choose> 
    <xsl:when test="following-sibling::w:tbl//w:p[w:r[w:t]]" > 

     <table> 
       <!--some code here --> 
      </table> 
     </xsl:when> 
    </xsl:choose> 

但,而這樣做,輸出類似...

<table> 
     <paragraph>row1col1</paragraph> 
     <paragraph>row1col2</paragraph> 
     <paragraph>row2col1</paragraph> 
     <paragraph>row2col2</paragraph> 
     <paragraph>row11col11</paragraph> 
     <paragraph>row11col12</paragraph> 
     <paragraph>row12col11</paragraph> 
     <paragraph>row12col12</paragraph> 
</table> 

我想每個組在單獨的表node.How我做的每個表?請指引我走出這個問題...

+1

您還想做其他事情。只需要爲每個w:tbl元素執行一次,並根據需要添加任何前面的元素。 – FailedDev

+0

@FailedDev ::謝謝,我會盡力實現你的想法。如果你找到了方法,然後請讓我知道 – Saravanan

回答

2

從你的XSLT的評論,它表明你定位在W¯¯,R元素,但你的XSLT片段建議你實際上是定位在w^:p元素。

假設你的當前節點是w ^:P,如果你想獲得第一寬:它後面TBL元素,你可以做以下

<xsl:when test="following-sibling::w:tbl[1]//w:p[w:r[w:t]]" > 

然而,這聽起來像你只要找到第一個寬:TBL元素,如果它緊跟在w ^:p(:p是寬:TBL元素即第一跟隨W元素)。在這種情況下,您可能需要執行以下操作:

<xsl:when test="following-sibling::*[1][self::w:tbl]//w:p[w:r[w:t]]" > 
+0

非常感謝蒂姆...這是完美的工作,但「第二表」是在table2.How保持相同的訂單... – Saravanan

+0

很難說,因爲您沒有顯示完整的XSLT。如果您有其他問題,您可能需要提出一個新問題。謝謝。 –

相關問題