如何使用Python LXML Objectify创建相同的XML元素3次

时间:2012-09-25 15:51:34

标签: python xml lxml

我问了几个星期前添加multiple elements的问题,现在我遇到了类似的问题。我必须创建一些XML,我将拥有以下内容:

<embossed>
   <line>Test Line</line>
   <line>Test Line 2</line>
   <line>Test Line 3</line>
</embossed>

我无法弄清楚如何使用LXML objectify.Element()方法连续N次创建相同的元素。我试过这个:

embossed = objectify.Element('embossed')
embossed.line = objectify.Element("line")
embossed.line = objectify.Element("line")

但我最终在“浮雕”元素中只有一个“line”元素。有谁知道如何做到这一点?谢谢!

1 个答案:

答案 0 :(得分:3)

只需将这些行附加到embossed,而不是:

embossed = objectify.Element('embossed')
embossed.append(objectify.Element('line'))
embossed.line[-1] = 'Test Line'
embossed.append(objectify.Element('line'))
embossed.line[-1] = 'Test Line 2'

每个lxml树标记的行为类似于列表,其中任何子元素都是列表中的元素。只需添加新的objectify.Element对象,就可以将它们作为您附加的标记的子项。

然后,您可以使用索引来访问该列表的每个元素; -1索引是最后一个元素,允许我们设置它的文本。

以上代码输出:

>>> from lxml import objectify, etree
>>> embossed = objectify.Element('embossed')
>>> embossed.append(objectify.Element('line'))
>>> embossed.line[-1] = 'Test Line'
>>> embossed.append(objectify.Element('line'))
>>> embossed.line[-1] = 'Test Line 2'
>>> print etree.tostring(embossed, pretty_print=True)
<embossed xmlns:py="http://codespeak.net/lxml/objectify/pytype" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="TREE">
  <line py:pytype="str">Test Line</line>
  <line py:pytype="str">Test Line 2</line>
</embossed>