2013-03-04 12 views
0

我試圖使用LXML處理之前和XML內容後,可能有一些非XML垃圾文件,想象一下有人拍攝到的終端緩存和我有這樣的事情:我可以讓lxml忽略根標記之前和之後的非XML內容嗎?

[email protected]: cat /tmp/log.xml 
<log> 
    <foo>...</foo> 
    <bar>.. 
... 
</bar> 

</log> 

[email protected]: 

如果我手動etree.parse文件名,它扼殺在開始的內容。我可以刪除第一組行,直到找到以'<'開始的行並將其交給etree.parse,然後在關閉內容時扼殺。打開和關閉非xml垃圾可以是任何東西。我可以堅持在文件中使用有效的XML,但我試圖對我的輸入有所寬容。 任何想法?

+0

如果某人在開始或結束前添加了幾乎*有效的XML,該怎麼辦?你在哪裏畫線? – 2013-03-04 18:34:58

+0

我在一個明顯的開放式根標籤之前畫了一些東西,以及關閉那個相同的根標籤之後的東西。對於我試圖解決的情況,這是合理的。我主要期望在之前和之後的shell命令和提示。你認爲這是一個失敗的原因,我應該堅持一個完全有效的XML文檔? – kbyrd 2013-03-04 18:38:20

+0

我在說這是一個失敗的原因,你應該關注有效的XML。 :-)至多你可以從一開始就清除所有不是開頭的'<',所有不是'''的結尾。 – 2013-03-04 18:42:49

回答

1

下面是方便之間和正確性的平衡的另一點:

import re 

xml = re.search(r"<(\w+).*</\1>", console_output, flags=re.DOTALL).group() 

它期望在上述格式給出一個單一的根標籤。

+0

我最終這樣做了,它處理了我需要處理的常見情況,即提取看起來像是根標記及其所有內容的第一件事。 – kbyrd 2013-03-05 18:15:00

0

最多可以清理一切,是不是從前面的開啓角度支架,並且一切不是從末端的右尖括號:

data = data[data.find('<'):data.rfind('>')] 

但這會翻倒容易如果在實際的XML數據之前的開始處有任何打開的尖括號,並且數據末尾有任何額外的關閉尖括號。這是在shell環境中不常見的而不是

這將是更容易在你身上,如果你只是拒絕任何這樣的投入。

相關問題