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

3

I have the following xml input:

<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个回答

3
您可以使用此模板将父子元素转换为组合元素:
<xsl:template match="parent">
   <combined>
      <xsl:copy-of select="@* | child/@*" />
   </combined>
</xsl:template>

这个操作会将输入的<parent>元素及其<child>的所有属性复制到输出的<combined>元素中。
你还需要一个identity模板,以便通过<data>元素和其他节点。
<xsl:template match="node() | @*">
   <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
   </xsl:copy>
</xsl:template>

非常感谢。这正是我在寻找的。如果我想恢复到原始输入结构,模板会是什么样子? - RynoB
我是指旨在教授某些东西。英文有点奇怪?我是意大利人:D - Emiliano Poggi
好的,我以为“aim”是“teaching”的直接宾语,所以我有点困惑。 :-) - LarsH

3

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

简单明了:

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

谢谢empo!完美地工作着。 - RynoB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接