3

我没有使用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。

4

1 回答 1

6

如果您的函数可以返回多个元素,那么您需要使用*参数语法将这些元素作为位置参数传递给E.body()方法:

...
    E.body(
        *func()
    )

现在func()应该返回一个序列:

def func(count):
    result = []
    for i in xrange(count):
        result.append(E("p", "text", key="value"))
    return result
于 2012-10-17T10:02:04.887 回答