how to get the next immediate following-sibling of particular node in xslt2.0?
这是我的xml文档。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <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文件转换为给定格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <Document> <Heading1> Tables <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> |
除了下面提到的情况外,我几乎完成了所有工作。假设当前节点是第一个
1 2 3 4 5 6 7 8 | <xsl:choose> <xsl:when test="following-sibling::w:tbl//w:p[w:r[w:t]]"> <table> <!--some code here --> </table> </xsl:when> </xsl:choose> |
但是,这样做的时候,输出就像...
1 2 3 4 5 6 7 8 9 10 | <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> |
我想将每个表分组到单独的表节点中。我该怎么做?请指导我摆脱这个问题...
根据您XSLT中的注释,它表明您位于w:r元素上,但是您的XSLT代码段表明您实际上位于w:p元素上。
如果您要获取紧随其后的第一个w:tbl元素,则假定当前节点为w:p,则可以执行以下操作
1 | <xsl:when test="following-sibling::w:tbl[1]//w:p[w:r[w:t]]"> |
但是,听起来好像您只想找到第一个w:tbl元素(如果它紧随w:p之后)(即,紧随w:p的第一个元素就是w:tbl元素)。在这种情况下,您可能想要执行以下
1 | <xsl:when test="following-sibling::*[1][self::w:tbl]//w:p[w:r[w:t]]"> |