解析时,`lxml`中是否有一种方法可以跳过不相关的分支

时间:2018-08-23 08:12:04

标签: python xml parsing lxml

我正在尝试从大型XML文件(2G)中解析少量数据。

对于小文件,我只会使用

root_node.xpath('/the/specific/path/i/am/interested/in')

但是我已经读到这非常消耗内存。

对于大文件,this reference建议实现目标解析器或使用etree.iterparse的方法。 尽管这些方法消耗的内存较少,但是仍然可以遍历整个树。

lxml还可用于跳过所有不相关分支的迭代,即避免解析器输入吗?

例如,当我有

<the>
  <irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
  <specific>
    <irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
    <path>
      <irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
      <i>
         <irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
         <am>
         <irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
           <interested>
             <irrelevant_to_me> 3000 lines, do not enter! </irrelevant_to_me>
             <in>
               <!-- goal -->
             </in>
           </interested>
         </am>
      </i>
    </path>
  </specific>
</the>

解析器甚至不应输入<irrelevant_to_me>-节点(无论其名称如何)。

0 个答案:

没有答案