如何在Python中将列表对象转换为XML?

-1 投票
4 回答
7836 浏览
提问于 2025-04-18 02:49

我有一个对象,它是列表类型的。用 print type(result) 打印出来的结果是 <type 'list'>。有没有什么函数可以自动把它转换成 XML 格式呢?

4 个回答

-1

查看一下objectify和来自lxml的E-factory。

E = objectify.E
result = [{ 'a': 1 }, {'a': 2} , {'a': 3}]   
child_tags = [E.mytag(el) for el in result]
xml = E.root(*child_tags)
etree.tostring(xml, pretty_print=True)

E可以为任何标签提供构造器。在我的例子中,你会为列表中的每个元素生成一个mytag标签,并且每个标签会有对应于字典键的属性。所以最终生成的xml会是:

<root xmlns:py="http://codespeak.net/lxml/objectify/pytype"  
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <mytag a="1"/>
  <mytag a="2"/>
  <mytag a="3"/>
</root>
-1

我刚开始学Python,但我觉得这段代码能完成任务,而且很容易理解 :)

persons_list = [['Ahmed', '16', 'white'], ['Housein', '16', 'green']]

f = open('data.xml', 'w')
f.write('<?xml version="1.0" encoding="UTF-8"?>')
f.write('<persons>')

for person in persons_list :
    f.write('<person>')
    f.write('<name>' + person[0] + '</name>')
    f.write('<age>' + person[1] + '</age>')
    f.write('<color> ' + person[2] + '</color>')
    f.write('</person>')

f.write('</persons>')
f.close()

不过我觉得这不是最好的做法 ;)

0

有一个非常简单的 dict2xml 库,可以很轻松地完成这个任务,甚至像嵌套列表这样的复杂结构也能很好地支持:

示例:

from dict2xml import dict2xml as xmlify
data = [
    {"a": 1},
    {"a": 2},
    {"a": 3},
    {"a": [
        {"b": 1},
        {"b": 2},
        {"b": 3},
    ]}
]

print xmlify(data, wrap="all", indent="  ")

结果:

<all>
  <a>1</a>
</all>
<all>
  <a>2</a>
</all>
<all>
  <a>3</a>
</all>
<all>
  <a>
    <b>1</b>
  </a>
  <a>
    <b>2</b>
  </a>
  <a>
    <b>3</b>
  </a>
</all>
1

使用 yattag 这个库:

from yattag import Doc

doc, tag, text = Doc().tagtext()

with tag('persons'):
    for person in persons_dict:
        doc.stag('person', **person):

result = doc.getvalue()

撰写回答