Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从大型文件中提取具有给定分隔符标记的XML块?_Python_Xml_Xpath_Xml Parsing - Fatal编程技术网

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

Python 如何从大型文件中提取具有给定分隔符标记的XML块?,python,xml,xpath,xml-parsing,Python,Xml,Xpath,Xml Parsing,我有大量(500 MB-2 GB)XML文件,目前我使用iterparse线性处理。一般结构是许多具有相同结构的记录,我只对其中的一小部分感兴趣。我今天的方法是边走边解析,只保留我感兴趣的内容(一旦解析完成)。这是可行的,尽管速度很慢 出于各种原因(主要原因是好奇),我想重写解析以提取符合我的“记录”(一组特定标记)定义的XML块,并检查块(作为字符串)是否包含使记录有趣的特定子字符串。这些块将排队等待进一步处理 所有这些都使用基于DOM的方法,这些方法不适合我的大文件 是否存在一个现有的模块/

我有大量(500 MB-2 GB)XML文件,目前我使用
iterparse
线性处理。一般结构是许多具有相同结构的记录,我只对其中的一小部分感兴趣。我今天的方法是边走边解析,只保留我感兴趣的内容(一旦解析完成)。这是可行的,尽管速度很慢

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

所有这些都使用基于DOM的方法,这些方法不适合我的大文件


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

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

这将返回RecordTag或OtherTag的所有元素的列表

records = etree.parse(file).xpath(".//*[self::RecordTag or self:OtherTag]")
如果您只关心一种类型的元素,那么这个xpath查询更简单,并且可能比上面的查询提供更好的性能,后者对树中的每个元素执行自轴检查

xpath(".//Record")

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

我向我们展示了文件的一部分和所需的输出。您是否愿意使用某种工具解析该文件,还是希望使用纯python代码解决方案?