背景:
我有大型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文件),但没有找到基于模式的分析。这种方法可用吗?
答案 0 :(得分:1)
我将如何解决问题:
xml.etree.ElementTree
来解析片段,因为它们是正确的XML。XPath
描述并稍后提取特定节点。作为字符串的XPath很容易存储在不可执行的配置存储中。它并不完全是“基于模板的”,但绝对比原始Python代码更具说明性和简洁性。