2010-09-06 68 views
7

我是python/lxml的新手在閱讀lxml網站並深入python之後,我找不到解決方案給我的n00b煩惱。我有以下XML示例:Python Lxml - 用新數據追加現有的xml

--------------- 
<addressbook> 
    <person> 
     <name>Eric Idle</name> 
     <phone type='fix'>999-999-999</phone> 
     <phone type='mobile'>555-555-555</phone> 
     <address> 
      <street>12, spam road</street> 
      <city>London</city> 
      <zip>H4B 1X3</zip> 
     </address> 
    </person> 
</addressbook> 
------------------------------- 

我想要一個孩子追加到根元素,並背出寫入整個文件作爲一個新的XML或寫上現有的XML。目前我寫的只有一行。

from lxml import etree 
tree = etree.parse('addressbook.xml') 
root = tree.getroot() 
oSetroot = etree.Element(root.tag) 
NewSub = etree.SubElement (oSetroot, 'CREATE_NEW_SUB') 
doc = etree.ElementTree (oSetroot) 
doc.write ('addressbook1.xml') 

TIA

+0

注意,我編輯你的Q可格式化代碼和XML清晰 - 在編寫包含代碼Q中的(或就像XML一樣),突出顯示這些塊,然後單擊圖標,看起來就像文本上方的圖標線上的0和1的小方塊 - 這是實現格式化的最簡單方法(只需通過縮進整個塊四個空間,並確保前後有空行相當 - 這就是點擊圖標爲你做的,btw ;-)。 – 2010-09-06 02:37:54

+0

@亞歷克斯,非常感謝你在這麼短的時間內學習+1000先生 – 2010-09-06 04:46:58

回答

16

通過複製在舊的所有可以作出新樹(不只是根標籤 - !),但它更簡單編輯現有的樹-place(和,爲什麼不 - ?)...:

tree = etree.parse('addressbook.xml') 
root = tree.getroot() 
NewSub = etree.SubElement (root, 'CREATE_NEW_SUB') 
tree.write ('addressbook1.xml') 

這使在addressbook1.xml

<addressbook> 
    <person> 
     <name>Eric Idle</name> 
     <phone type="fix">999-999-999</phone> 
     <phone type="mobile">555-555-555</phone> 
     <address> 
      <street>12, spam road</street> 
      <city>London</city> 
      <zip>H4B 1X3</zip> 
     </address> 
    </person> 
<CREATE_NEW_SUB /></addressbook> 

(我希望是你正在尋找...效果 - ?)

+0

是的,它確切地說! **桌上甩頭**謝謝! – 2010-09-06 04:26:38

+5

@Nathaniel,不客氣!一旦你嘗試了答案的建議,如果它運作良好並因此幫助你,請記住「接受」答案(通過點擊答案左側的複選標記形狀圖標) - 這是核心堆棧溢出禮節! - )。 – 2010-09-06 05:31:34