2016-10-14 84 views
0

我正在寻找一个基于标签的xml文件的简单拆分;说3个标签总是重复,需要拆分为如下所示:基于标签的拆分

输入

<?xml version="1.0" encoding="UTF-8"?> 
<Test> 
    <tag1>A</tag1> 
    <tag2>B</tag2> 
    <tag3>C</tag3> 
    <tag1>1</tag1> 
    <tag2>2</tag2> 
    <tag3>3</tag3> 
    <tag1>apple</tag1> 
    <tag2>orange</tag2> 
    <tag3>mango</tag3> 
</Test> 

期望输出

<Root> 
    <Test> 
     <tag1>A</tag1> 
     <tag2>B</tag2> 
     <tag3>C</tag3> 
    </Test> 
    <Test> 
     <tag1>1</tag1> 
     <tag2>2</tag2> 
     <tag3>3</tag3> 
    </Test> 
    <Test> 
     <tag1>apple</tag1> 
     <tag2>orange</tag2> 
     <tag3>mango</tag3> 
    </Test> 
</Root> 

任何帮助表示赞赏

感谢

回答

1

如果结构是有规律的,你可以做简单:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/Test"> 
    <Root> 
     <xsl:for-each select="tag1"> 
      <Test> 
       <xsl:copy-of select=". | following-sibling::tag2[1] | following-sibling::tag3[1] "/> 
      </Test> 
     </xsl:for-each> 
    </Root> 
</xsl:template> 

</xsl:stylesheet> 
+0

巧妙的解决办法! – kjhughes

+0

非常整洁的解决方案。它适用于简单的标签;但如果标签具有关联的xmlns,则不会。 –

+0

示例 - 如果tag1与 A一样,则不需要。我如何在xslt中提到应该包含xmlns? –