2011-11-04 130 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。如果您有其他问题,您可能需要提出一个新问题。谢谢。 –

相关问题