2009-06-09 69 views
1

我正在使用lxml來處理一些現有的XML文檔,並且我想盡可能少地引入差異噪聲。不幸的是默認lxml.etree.XMLParser文檔的根元素之前或之後不保留空白:如何讓lxml的解析器保留根元素之外的空白空間?

>>> xml = '\n <etaoin>shrdlu</etaoin>\n' 
>>> lxml.etree.tostring(lxml.etree.fromstring(xml)) 
'<etaoin>shrdlu</etaoin>' 
>>> lxml.etree.tostring(lxml.etree.fromstring(xml)) == xml 
False 

這可能使用LXML?它是否支持底層的libxml2?

回答

0

用正則表達式捕獲空白,並在完成後將其添加回字符串。

+0

我在尋找同樣問題的解決方案時偶然發現了這個答案。但我不明白;你將如何實現這個目標?例如,如果更改引入了新的屬性或者在其中添加了一個帶有空格的字符串?你將如何恢復空白? – flodin 2010-11-07 20:57:34

1

我不知道任何XML庫會爲你做。但是,如果你真的需要這樣做,使用正則表達式聽起來像一個體面的想法。

>>> xml = '\n <etaoin>shrdlu</etaoin>\n' 
>>> head, tail = re.findall(r"^\s*|\s*$", xml)[:2] 
>>> root = etree.fromstring(xml) 
>>> out = head + etree.tostring(root) + tail 
>>> out == xml 
True