2012-09-25 55 views
3

幾周前我問了一個關於添加multiple elements的問題,現在我遇到了類似的問題。我要創建一些XML,我會具備以下條件:如何用Python LXML創建3次相同的XML元素Objectify

<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") 

但我最終的「浮雕」元素裏只有一個「線」元素。有誰知道如何做到這一點?謝謝!

回答

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

如何分配值,則行項目?我從平面文件創建XML,並需要爲每行分配不同的值。 –

+0

@MikeDriscoll:只需像處理任何元素一樣操縱它們。我已經更新了答案;現在我將新創建的'line'元素存儲到變量中,設置'text'屬性,*然後*將它追加到父'embossed'標籤。 –

+0

啊哈!我想我必須運行一箇舊版本的lxml,因爲我找不到要設置的「文本」屬性或其他人提到的SubElement方法。謝謝! –