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

如何将指定JSON转换为以属性而非元素呈现的XML?已尝试xmltodict与dicttoxml库未成功

如何将JSON转换为仅包含属性的单节点XML

我明白你的痛点——你需要把给定的JSON转换成一个只有属性、没有子元素的单节点XML,而常用的xmltodict和dicttoxml库默认都是生成带子元素的结构,确实不太适配这种需求。其实这种XML格式虽然看起来简洁,但属于合法的XML(XML允许元素仅包含属性),我们可以用Python内置的XML处理库来手动构建,完全可控。

解决方案:用xml.etree.ElementTree手动构建XML

这个方法直接且灵活,能精准生成你想要的结构:

  1. 解析JSON数据,提取根节点名称(也就是operacion字段的值)
  2. 创建根XML元素,把除了operacion之外的所有JSON键值对作为元素的属性
  3. 生成最终的XML字符串

以下是完整代码示例:

import json
import xml.etree.ElementTree as ET

# 你的原始JSON字符串
json_str = '''{ "operacion": "ingresarOrdenBilateral", "agente" : "0062", "comitente" : 7211, "fechaOrigen" : "2021-09-23T16:51:27.873-03:00", "tipo" : "V", "instrumento" : "GD30", "tipoVenc" : "24", "precio" : "100000000", "cantidad" : "1", "idOrigen" : 10699570, "ejecucion" : "SINCRONICA" }'''

# 解析JSON为字典
data = json.loads(json_str)

# 提取根节点名称
root_tag = data.pop('operacion')

# 创建根元素
root = ET.Element(root_tag)

# 遍历所有键值对,添加为属性(注意把所有值转成字符串,因为XML属性必须是字符串类型)
for key, value in data.items():
    root.set(key, str(value))

# 生成XML字符串,添加XML声明
xml_str = ET.tostring(root, encoding='utf-8', xml_declaration=True).decode('utf-8')

print(xml_str)

运行这段代码后,你会得到完全符合需求的XML:

<?xml version='1.0' encoding='utf-8'?>
<ingresarOrdenBilateral agente="0062" comitente="7211" fechaOrigen="2021-09-23T16:51:27.873-03:00" tipo="V" instrumento="GD30" tipoVenc="24" precio="100000000" cantidad="1" idOrigen="10699570" ejecucion="SINCRONICA"/>

为什么不用dicttoxml或xmltodict?

  • xmltodict的核心优势是XML转字典,反向生成XML时默认会创建子元素,要改造成属性形式需要额外的自定义逻辑,反而麻烦。
  • dicttoxml默认也是生成子元素结构,虽然可以通过自定义参数调整,但对于这种单节点全属性的场景,手动构建的代码更简洁直观,不需要学习库的特殊配置。

如果后续需要处理更复杂的结构,这个手动构建的思路也可以轻松扩展,比如嵌套元素的属性处理等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:47:43