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

如何用XSLT将category元素的id属性转为categoryid子元素

嘿,这里有两种靠谱的方法帮你完成这个XML结构转换的需求:

方法1:使用XSLT(XML原生转换方案)

这是处理XML结构调整最标准的方式,用下面的XSLT模板就能精准实现你的需求:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 身份模板:原样复制所有节点和属性,保证其他内容不受影响 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 专门处理category元素的自定义模板 -->
  <xsl:template match="category">
    <xsl:copy>
      <!-- 提取原id属性值,生成新的categoryid子元素 -->
      <categoryid><xsl:value-of select="@id"/></categoryid>
      <!-- 复制category下的所有子节点,自动跳过原id属性 -->
      <xsl:apply-templates select="node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

简单说明:

  • 第一个模板是基础,负责原样保留XML里的其他所有内容(像<something>、<nothing>这些元素都不会被改动);
  • 第二个模板专门针对<category>元素:先复制标签本身但去掉原id属性,接着生成<categoryid>子元素并填充id值,最后把原来的子节点都搬过来。

你可以用任何支持XSLT的工具(比如Saxon、Xalan,甚至在线XML转换工具)来套用这个样式表,就能得到你想要的结果。

方法2:用Python代码自动化处理

如果需要批量处理或者和其他业务逻辑结合,用Python的lxml库来实现会非常灵活,代码示例如下:

from lxml import etree

# 原始XML内容
xml_content = """
<root>
  <category id="123">
    <something id="777">987</something>
    <nothing>555</nothing>
  </category>
</root>
"""

# 解析XML
root = etree.fromstring(xml_content)

# 定位到目标category元素(支持处理多个category的场景)
for category in root.findall('category'):
    # 获取原id属性值
    cat_id = category.get('id')
    if cat_id:
        # 删除原id属性
        category.attrib.pop('id')
        # 创建新的categoryid元素并填充内容
        categoryid = etree.Element('categoryid')
        categoryid.text = cat_id
        # 把新元素插入到category的最前面
        category.insert(0, categoryid)

# 输出格式化后的XML
print(etree.tostring(root, pretty_print=True, encoding='unicode'))

运行后你会得到:

<root>
  <category>
    <categoryid>123</categoryid>
    <something id="777">987</something>
    <nothing>555</nothing>
  </category>
</root>

这个代码还支持处理多个<category>元素的情况,要是你有一堆XML文件需要转换,稍微改改就能批量处理啦。

内容的提问来源于stack exchange,提问作者digest806

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:23