2016-12-16 38 views
0

我建有lxml.etree一個XML文件,這就是結果:如何插入文本了XML的條目與etree.Element

<BigData> 
    <user> 
    <enum> 
     <tree>sometext</tree> 
    </enum> 
    </user> 
</BigData> 

我試圖把一個條目,並想出這個:

<BigData> 
    <user>**this_is_the_extra_text** 
    <enum> 
     <tree>sometext</tree> 
    </enum> 
    </user> 
</BigData> 

有關如何做到這一點的任何想法? 如果我使用user = SubElement(user,BigData).text ='this_is_the_extra_text',我得到一個錯誤。 注意:我只想純文本,而不是一個新的XML條目。

謝謝!

+0

etree模塊具有「註釋」方法。那是你在找什麼? – iFlo

+0

不,我認爲評論方法將添加<! - 文本 - >,我不想括號:/ – aprin

回答

1

假設user是一個引用<user>元素的變量,您可以簡單地將其text屬性設置爲將文本節點添加爲第一個子元素。

這是演示設置:

>>> from xml.etree import ElementTree as ET 
>>> root = ET.Element('BigData') 
>>> user = ET.SubElement(root, 'user') 
>>> enum = ET.SubElement(user, 'enum') 
>>> print ET.tostring(root) 
<BigData><user><enum /></user></BigData> 

和下面是設置user.text後的輸出:

>>> user.text = 'this_is_the_extra_text' 
>>> print ET.tostring(root) 
<BigData><user>this_is_the_extra_text<enum /></user></BigData> 

如果你想添加但是其他子元素之後的文本節點(在換句話說,文本節點不會是第一個孩子),您需要改爲設置前一個元素的tail屬性。例如,在enum元素之後添加文本節點的工作如下:

>>> enum.tail = 'this_is_the_extra_text' 
>>> print ET.tostring(root) 
<BigData><user><enum />this_is_the_extra_text</user></BigData> 
+0

謝謝,我最終使用.text和一個錯誤發生,當我在不同的行中應用文本一切都好。 但是,儘管我最後的「pretty_print = True」,我得到了一個的單行標籤。任何想法如何解決這個問題呢? – aprin

+0

在python中打印格式良好的XML是一個老問題,我仍然不知道任何最終的即用型解決方案。 lxml的'pretty_print = True'和minidom的'toprettyprintxml'中的每一個都有它自己的問題... – har07

+0

也許值得花時間寫一個專門用於小型印刷的小型庫XML – har07