如何将指定JSON转换为以属性而非元素呈现的XML?已尝试xmltodict与dicttoxml库未成功
如何将JSON转换为仅包含属性的单节点XML
我明白你的痛点——你需要把给定的JSON转换成一个只有属性、没有子元素的单节点XML,而常用的xmltodict和dicttoxml库默认都是生成带子元素的结构,确实不太适配这种需求。其实这种XML格式虽然看起来简洁,但属于合法的XML(XML允许元素仅包含属性),我们可以用Python内置的XML处理库来手动构建,完全可控。
解决方案:用xml.etree.ElementTree手动构建XML
这个方法直接且灵活,能精准生成你想要的结构:
- 解析JSON数据,提取根节点名称(也就是
operacion字段的值) - 创建根XML元素,把除了
operacion之外的所有JSON键值对作为元素的属性 - 生成最终的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
相关产品推荐
相关产品推荐

