XSLT:将二级根元素拆分为两个XML

时间:2013-09-19 14:44:04

标签: xml xslt

需要xslt将以下输入转换为上述输出。 基本上需要将第二级元素拆分为两个节点。很少有来自内部的节点需要完全移动到特殊节点,第二级节点也需要重命名。

输入:

    <Root>
    <Root2>
    <Node1>
      <Node1_1></Node1_1>
      <Node1_2></Node1_2>
      <Node1_3></Node1_3>
    </Node1>

    <Node2>
      <Node2_1></Node2_1>
      <Node2_2></Node2_2>
      <Node2_3></Node2_3>
    </Node2>

    <Node3>
      <Node3_1></Node3_1>
      <Node3_2></Node3_2>
      <Node3_3></Node3_3>
    </Node3>
  </Root2>
     </Root>

输出:

    <Root>
  <NewRoot2>
    <Node1_1></Node1_1>
    <Node1_2></Node1_2>
  </NewRoot2>
  <NewRoot3>
    <Node1_3></Node1_3>
    <Node2_1></Node2_1>
    <Node2_2></Node2_2>
    <Node2_3></Node2_3>
    <Node3_1></Node3_1>
    <Node3_2></Node3_2>
    <Node3_3></Node3_3>
  </NewRoot3>
    </Root>

1 个答案:

答案 0 :(得分:0)

对于交付的输入,您可以使用所需的输出:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.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="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Root">
        <Root>
            <NewRoot2>
                <xsl:apply-templates select="//Node1_1|//Node1_2" />
            </NewRoot2>
            <NewRoot3>
                <xsl:apply-templates select="//Node1_3|//Node2/*|//Node3/*" />
            </NewRoot3>
        </Root>
    </xsl:template>
</xsl:stylesheet>