You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将XML子节点属性转换为父节点同级元素?

我来帮你搞定这个XML转换的需求!要把<Child-id>节点的Name属性提取出来变成<Parent>下的同级元素,同时保留<Child-id>的文本内容并去掉原有的<Children>容器,用XSLT就能轻松实现。

解决方案:使用XSLT实现XML转换

先明确你的输入和预期输出示例:

输入XML

<Parent>
  <Children>
    <Child-id Name="John Doe">52bf9104-2c5e-4f1f-a66d-552ebcc53df7</Child-id>
    <Child-id Name="Some One">52bf9104-2c5e-4f1f-a66d-552ebcc53daa</Child-id>
  </Children>
</Parent>

目标输出XML

<Parent>
  <child-id>52bf9104-2c5e-4f1f-a66d-552ebcc53df7</child-id>
  <Name>John Doe</Name>
  <child-id>52bf9104-2c5e-4f1f-a66d-552ebcc53daa</child-id>
  <Name>Some One</Name>
</Parent>

接下来是实现这个转换的XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 匹配根节点下的<Parent>元素,开始处理逻辑 -->
  <xsl:template match="/Parent">
    <Parent>
      <!-- 遍历<Children>下的每一个<Child-id>节点 -->
      <xsl:for-each select="Children/Child-id">
        <!-- 创建小写的<child-id>元素,复制原节点的文本内容 -->
        <child-id>
          <xsl:value-of select="text()"/>
        </child-id>
        <!-- 创建<Name>元素,提取原节点的Name属性值 -->
        <Name>
          <xsl:value-of select="@Name"/>
        </Name>
      </xsl:for-each>
    </Parent>
  </xsl:template>
</xsl:stylesheet>

代码逻辑说明:

  • <xsl:template match="/Parent">:定位到根节点下的<Parent>元素,作为转换的入口。
  • <xsl:for-each select="Children/Child-id">:循环处理每一个<Children>容器内的<Child-id>节点。
  • <child-id>:生成小写命名的新元素,通过<xsl:value-of select="text()"/>获取原<Child-id>节点里的UUID文本。
  • <Name>:生成新的<Name>元素,通过<xsl:value-of select="@Name"/>提取原<Child-id>节点的Name属性值。

你可以用任何支持XSLT的工具(比如Saxon、Xalan,或者在线XML转换工具)运行这个样式表,输入原始XML就能得到预期的输出结果。

内容的提问来源于stack exchange,提问作者George Appiah Sarfo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:59:04