我没有使用lxml来创建xml,所以我有点迷茫。我可以创建一个函数,创建一个元素:
from lxml import etree as ET
from lxml.builder import E
In [17]: def func():
...: return E("p", "text", key="value")
In [18]: page = (
...: E.xml(
...: E.head(
...: E.title("This is a sample document")
...: ),
...: E.body(
...: func()
...:
...: )
...: )
...: )
In [19]: print ET.tostring(page,pretty_print=True)
<xml>
<head>
<title>This is a sample document</title>
</head>
<body>
<p key="value">text</p>
</body>
</xml>
如何使该功能添加多个元素?例如,我希望func(3)
创建3个新段落。如果func重新列出一个列表,我会得到一个TypeError。
答案 0 :(得分:5)
如果你的函数可以返回多个元素,那么你需要使用*
argument syntax将这些元素作为位置参数传递给E.body()
方法:
...
E.body(
*func()
)
现在func()
应该返回一个序列:
def func(count):
result = []
for i in xrange(count):
result.append(E("p", "text", key="value"))
return result