使用属性将 dict 转换为 XML

dev*_*han 6 python xml xml-serialization dicttoxml

我在 python 中使用 dicttoxml 将 dict 转换为 XML 。

我需要将 dict 转换为 XML 属性。

例如:

字典

[
      {
           "@name":"Ravi",
           "@age":21,
           "college":"Anna University"
       }
]
Run Code Online (Sandbox Code Playgroud)

输出 XML

[
      {
           "@name":"Ravi",
           "@age":21,
           "college":"Anna University"
       }
]
Run Code Online (Sandbox Code Playgroud)

代码

dicttoxml(dict, custom_root='Student', attr_type=False, root=True)
Run Code Online (Sandbox Code Playgroud)

实际产量

<Student name="Ravi" age=21>
  <college>Anna University</college>
</Student>
Run Code Online (Sandbox Code Playgroud)

His*_*ffa 12

我有类似的要求将 XML 转换为 dict,反之亦然。我使用了一个名为xmltodict的库。该库允许您使用属性从 dict 反转到 xml。

词典

xmldata = { 'student': {
       "@name":"Ravi",
       "@age":21,
       "college":"Anna University"
}}
Run Code Online (Sandbox Code Playgroud)

代码

import xmltodict

print(xmltodict.unparse(xmldata, pretty=True))
Run Code Online (Sandbox Code Playgroud)


Nis*_*ava 6

尽管这个问题已经存在很长时间了,但 dicttoxml 尚未支持这一点。 https://github.com/quandyfactory/dicttoxml/issues/27

不过,如果您的需求不是那么复杂,您可以尝试这个简单的序列化器。

https://gist.github.com/reimund/5435343/

在这里找到它:-将 Python 字典序列化为 XML


小智 6

我也在使用 xmltodict,我认为 Hisham 的答案中有语法错误,但我无法发表评论,所以这里是:

import xmltodict

xmldata = {
       'Student': {
           '@name':'Ravi',
           '@age':21,
           "college":"Anna University"
           }
   }

print(xmltodict.unparse(xmldata,pretty=True))
Run Code Online (Sandbox Code Playgroud)

输出

<?xml version="1.0" encoding="utf-8"?>
<Student name="Ravi" age="21">
        <college>Anna University</college>
</Student>
Run Code Online (Sandbox Code Playgroud)


小智 5

我可能会建议declxml(完全披露:我写的)。使用 declxml,您可以创建一个称为处理器的对象,该对象以声明方式定义 XML 的结构。您可以使用处理器来解析和序列化 XML 数据。declxml 用于与字典、对象和命名元组之间的序列化。它处理属性和元素数组并执行基本验证。

import declxml as xml


student = {
    'name':'Ravi',
    'age':21,
    'college':'Anna University'
}

student_processor = xml.dictionary('Student', [
    xml.string('.', attribute='name'),
    xml.integer('.', attribute='age'),
    xml.string('college')
])

xml.serialize_to_string(student_processor, student, indent='    ')
Run Code Online (Sandbox Code Playgroud)

产生所需的输出

<?xml version="1.0" ?>
<Student age="21" name="Ravi">
    <college>Anna University</college>
</Student>
Run Code Online (Sandbox Code Playgroud)