2017-07-10 46 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代码更具说明性和简洁性。