从列表中创建XML子项

时间:2014-12-25 18:36:56

标签: xml list python-2.7

我想迭代列表并为每个list-element创建XML-File中的子条目。要创建XML文件,我使用带有etree的lxml。我能做到:

heads = ["foo", "foobar", "fooboo"]

child1 = etree.SubElement(root, heads[0])
child2 = etree.SubElement(root, heads[1])
...

但我想自动完成 - 如果有10个列表项,则XML文件中应该有10个子条目。我尝试过这样的事情:

for i_c, i in enumerate(heads):
     a = "child_%i = etree.SubElement(root, %s)" % (i_c, i)
     exec a

我是Python的新手..所以请不要介意。 :)

问候, 扬

1 个答案:

答案 0 :(得分:1)

你可以使用:

import lxml.etree as etree
root = etree.Element('root')
heads = ["foo", "foobar", "fooboo"]
for head in heads:
    etree.SubElement(root, head)

您无需定义child_n,因为您可以通过root[n]访问它们:

In [114]: list(root)
Out[114]: 
[<Element foo at 0x7fa434bdf680>,
 <Element foobar at 0x7fa434bdf560>,
 <Element fooboo at 0x7fa434bdfab8>]

In [115]: root[1]
Out[115]: <Element foobar at 0x7fa434bdf560>

提示:每当您开始使用数字命名变量(例如child_1child_2)时,您很可能应该使用一个变量(例如{ {1}})这是一个元组,列表或字典(或者在这种情况下,root支持类似列表的索引)。

因此,如果Element不像列表那样你想要收集孩子 列表中的元素,您可以使用

root

然后,您可以使用child = list() for head in heads: child.append(etree.SubElement(root, head)) 而不是child_n来访问nth子项(因为Python使用基于0的索引)。