如何从列表中动态生成 XML?

How to generate dynamically XML from lists?

假设我有 3 个列表:

name = ['name1','name2','name3']
ident = ['1','2','7']
vtype = ['type1', 'type2', 'type3']

我想根据这些列表创建一个 XML,我可以创建一个块,但不能为列表中的每个元素创建一个块。 我的代码:

import lxml.etree
import lxml.builder    

new_xml = lxml.builder.ElementMaker()
body = new_xml.body 
head = new_xml.head 
mainvar = new_xml.mainvar 
name = new_xml.name
final_xml =(body(
        head(
                mainvar(
                        name('some name'),
                        ident = '1', type='some type')
                )))

结果是:

<?xml version='1.0' encoding='utf-8'?>
<body>
  <head>
    <mainvar ident="1" type="some type">
      <name>some name</name>
    </mainvar>
  </head>
</body>

我想要什么:

<?xml version='1.0' encoding='utf-8'?>
<body>
  <head>
    <mainvar ident="1" type="type1">
      <name>name1</name>
    </mainvar>
    <mainvar ident="2" type="type2">
      <name>name2</name>
    </mainvar>
    <mainvar ident="7" type="type3">
      <name>name3</name>
    </mainvar>
  </head>
</body>

我该怎么做? 提前致谢!

在Python3我用

from lxml import etree as ET

body = ET.Element('body')
head = ET.SubElement(body, 'head')


for n, i, t in zip(name, ident, vtype):
    mainVar = ET.SubElement(head, 'mainVar', { 'ident' : i, 'type' : t})
    name = ET.SubElement(mainVar, 'name')
    name.text = n

或与建造者E:

from lxml import etree as ET

from lxml.builder import E

name = ['name1','name2','name3']
ident = ['1','2','7']
vtype = ['type1', 'type2', 'type3']

body = E.body(
         E.head(
            *[E.mainVar(E.name(n), indent=i, type=t) for n, i, t in zip(name, ident, vtype)]
         )
       )


ET.dump(body)