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 に答える