2014-07-09 61 views
0

我有一個應用程序不斷地從文件重新加載大量的XML數據,然後執行操作,然後寫回文件。用lxml解析XML,然後用cElementTree處理它

對於解析和解析XML而言,lxml庫的驗證速度要快得多,但對於某些類型的操作,cElementTree要快得多。兩者都有幾乎相同的API。

如何使用lxml解析XML文件,然後使用cElementTree處理它?

這就是我嘗試過的,但lxml解析方法產生的對象固有地使用它自己的操縱方法。

import xml.etree.cElementTree as ET 
from lxml import etree as lxmlET 

回答

2

這個問題也許是Python的等價物的「我的朋友有一個很快的賽車,我只是有難有起色。我怎樣才能讓我的車去一樣快,她的?」

我並不是說這不可能完成,但我應該稱呼這樣一個企業要麼雄心勃勃,要麼是蠻幹的,這取決於您的編程技能水平。重點是每個系統都有,正如你發現的那樣,它自己的解析XML的內部表示。

儘管可能編寫代碼來獲取由lxml生成的解析對象並重新創建或將其包裝爲ElementTree元素,但它可能要花費與a)首先解析ElementTree一樣長的時間,並且b)成爲維修噩夢。

所以你自己幫忙,選擇一種技術然後堅持下去(至少對於每個單獨的程序)。

我還要指出,XML主要是作爲數據交換語言使用的。您似乎將其用作結構化數據存儲庫的事實不可避免地會導致處理過程中效率低下,特別是在數據量增加時。選擇一些更適合的表示法,然後將其轉換爲XML以便由其他系統輸出和使用,可能會更好嗎?

+0

謝謝你的回答。但我懷疑,如果某種內部重命名,強制lxml對象使用ElementTree方法可以完成,那麼從XML - > lxml - > ElementTree轉換將比XML - > ElementTree更快。 –

+0

爲了回答您最後的擔憂,我的應用程序不斷與其他應用程序進行交互,並且存在相當頻繁的數據交換,因此我堅持使用XML。 –

+0

夠公平的。但我擔心,單單重命名不會彌補這兩個系統之間的漏洞。歡迎您嘗試。順便說一下,我們在談論多少XML? – holdenweb