如何从大文件中提取具有给定分隔符标记的XML块?

时间:2014-10-25 15:22:12

标签: python xml xpath xml-parsing

我有大型(500 MB - 2 GB)XML文件,我目前使用iterparse线性处理。一般结构是很多具有相同结构的记录,我只想分析一小部分。我今天的方法是在我去的时候解析并保留我感兴趣的那些(一旦被解析)。这很有效,但速度很慢。

由于各种原因(主要是好奇心),我想重写解析以提取符合我的“记录”(一组特定标签)定义的XML块,并检查块(作为字符串)是否包含一个特定的子串,使记录有趣。这些块将排队等待进一步处理。

The solutions to a similar question都使用基于DOM的方法,这些方法不适合我的大文件。

是否有一个现有的模块/方法可以采用边界标记并以线性方式吐出由它分隔的XML集团,类似xpath中的lxml.etree.parse方法?

1 个答案:

答案 0 :(得分:0)

如果不知道哪些标准会定义您感兴趣的节点,我就无能为力。但是,无论如何,我可以尝试回答部分问题。

这应该返回RecordTag或OtherTag的所有元素的列表。

records = etree.parse(file).xpath(".//*[self::RecordTag or self:OtherTag]")

如果你只关心一种类型的元素,那么这个xpath查询就比较简单,并且可能比上面提供更好的性能,它会对树中的每个元素执行自我轴检查。

xpath(".//Record")

如果您感兴趣的记录的标准比标记更复杂,那么我需要更多细节来帮助构建一个xpath。