我想迭代列表并为每个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的新手..所以请不要介意。 :)
问候, 扬
答案 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_1
,child_2
)时,您很可能应该使用一个变量(例如{ {1}})这是一个元组,列表或字典(或者在这种情况下,root
支持类似列表的索引)。
因此,如果Element
不像列表那样你想要收集孩子
列表中的元素,您可以使用
root
然后,您可以使用child = list()
for head in heads:
child.append(etree.SubElement(root, head))
而不是child_n
来访问nth
子项(因为Python使用基于0的索引)。