【问题标题】:Transform two nodes into one using xslt使用 xslt 将两个节点合二为一
【发布时间】:2011-06-17 17:52:46
【问题描述】:

我有以下 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 实现这一点?另外,记下名为&lt;combined&gt; 的新命名节点。

感谢您的帮助。

谢谢。

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    您可以使用此模板将父子元素转换为组合元素:

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

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

    您还需要身份模板,以便通过 &lt;data&gt; 元素和其他节点:

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

    【讨论】:

    • 非常感谢。这正是我一直在寻找的。如果我想恢复到原始输入结构,模板会是什么样子?
    • 我的意思是教一些东西。奇怪的英语?我是意大利人:D
    • 好吧,我以为'目标'是'教学'的直接对象,所以我很困惑。 :-)
    【解决方案2】:

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

    直截了当:

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

    【讨论】:

    • 谢谢恩波!完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2019-04-26
    • 2019-04-11
    • 2021-06-17
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多