2017-07-10 43 views
1

背景如何通過模板解析XML?

我有很大的XML文件(5-20​​ GB)組成的頭記錄,然後一系列具有相同標記的記錄(但不同的內容):

<header> 
(...) 
</header> 
<host> 
    <tagA>hello</tagA> 
    <tagB name="world"></tagB> 
    <tagC>bonjour</tagC> 
</host> 
<host> 
    (...) 
</host> 
(...) 
  • 當存在<host>中的標籤時,它總是具有相同的結構。
  • 我只在某些標籤內容(例如,從<tagA>hello)和一些標籤的參數(例如,從該參數的<tagB>nameworld)感興趣。我放棄其他標籤和內容。

今天我如何處理文件:

我讀輸入文件,一個提取一個<host></host>之間的部分(包括這些邊界標記),並與BeautifulSoup分析它們。這工作正常,我得到我需要的元素。

我想這樣做

我不過喜歡使用分析<host>條目(某種模式)和狀態哪些元素是我感興趣的描述。

我發現了逆演習的許多例子(如何基於模板創建XML文件),但沒有發現基於模式的分析。這樣的方法可用嗎?

+0

不會添加[mcve]幫助嗎? – boardrider

+0

@boardrider:不確定你錯過了什麼?你可以找到我分析過的數據的樣本,我不是在尋找一些解決方案來解決某些無法使用的代碼,而是通過一個模板/方案來區別不同的問題。 – WoJ

回答

1

我將如何處理這個問題:

  • 使用xml.etree.ElementTree解析碎片,因爲它們是正確的XML。
  • Use XPath來描述和稍後提取特定節點。作爲字符串的XPath很容易存儲在不可執行的配置存儲中。

它不完全是基於模板的,但肯定比原始Python代碼更具說明性和簡潔性。