使用xslt将两个节点转换为一个节点

时间:2011-06-16 20:39:02

标签: xml xslt

我有以下xml输入:

<data>
    <parent Id="1" value="ParentOne">
       <child x="1" y="2" />
    </parent>
    <parent Id="2" value="ParentTwo">
        <child x="3" y="4" />
    </parent>
</data>

我需要输出的内容应该像父节点和子节点一样:

<data>
    <combined Id="1" value="ParentOne" x="1" y="2" />
    <combined Id="2" value="ParentTwo" x="3" y="4" />
</data>

如何使用XSLT实现这一目标?另外,请记下名为<combined>的新命名节点。

我帮助你。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用此模板将parent-with-child转换为组合元素:

<xsl:template match="parent">
   <combined>
      <xsl:copy-of select="@* | child/@*" />
   </combined>
</xsl:template>

这样做是将输入<parent>元素及其<child>中的所有属性复制到输出<combined>元素中。

您还需要身份模板,以便通过<data>元素和其他节点传递:

<xsl:template match="node() | @*">
   <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
   </xsl:copy>
</xsl:template>

答案 1 :(得分:3)

  

如果我想恢复原始输入结构,模板会是什么样子?

Straightforwad:

   <xsl:template match="combined">
       <parent>
          <xsl:copy-of select="@Id|@Value"/>
          <child x="{@x}" y="{@y}"/>
       </parent>
    </xsl:template>