如何从列表中动态生成 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)
假设我有 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)