2012-10-17 98 views
2

我还没有使用lxml创建xml,所以我有点失落。我可以创建一个函数,创建一个elemnt:使用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。

回答

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 
+0

我不能评论Martijn的答案,所以我写了一个答案。 def func(count):result = [] for xrange(count):result.append(E(“p”,“text”,key =“value”))return result不适用于我,但更改**结果= [] **到**结果=列表()**做到了。 –