如何通过模板解析XML?

时间:2017-07-10 20:03:35

标签: python xml python-3.x

背景

我有大型XML文件(5-20​​ GB),包含一个标题记录,然后是一系列具有相同标记(但内容不同)的记录:

<header>
(...)
</header>
<host>
  <tagA>hello</tagA>
  <tagB name="world"></tagB>
  <tagC>bonjour</tagC>
</host>
<host>
  (...)
</host>
(...)
  • <host>中的标记存在时,它始终具有相同的结构。
  • 我只对某些标签内容(例如来自hello的{​​{1}})和某些标签的参数感兴趣(例如来自<tagA> world的{​​{1}} })。我丢弃了其他标签和内容。

我今天如何处理文件

我阅读了输入文件,逐一提取name<tagB>之间的片段(包括这些边界标记)并使用BeautifulSoup进行分析。这很好用,我得到了我需要的元素。

我想做什么

但我更喜欢使用分析的<host>条目(某种模式)的描述,并说明我感兴趣的元素。

我找到了很多反向练习的例子(如何基于模板创建XML文件),但没有找到基于模式的分析。这种方法可用吗?

1 个答案:

答案 0 :(得分:1)

我将如何解决问题:

  • 使用xml.etree.ElementTree来解析片段,因为它们是正确的XML。
  • Use XPath描述并稍后提取特定节点。作为字符串的XPath很容易存储在不可执行的配置存储中。

它并不完全是“基于模板的”,但绝对比原始Python代码更具说明性和简洁性。