我有一个巨大的XML文件。不过,我只对这棵巨树的一棵小子树感兴趣。我想解析这个子树,但我不想浪费时间分析整个大型树,因为我只会使用它的一小部分。在
理想情况下,我希望扫描整个文件,直到找到子树的开始,解析子树直到到达它的结尾,然后甚至不必费心阅读文件的其余部分。甚至可以用XPath表达式描述我感兴趣的子树。有没有一种方法可以使用lxml?看起来您可以使用iterparse()
方法来完成类似的操作,但是基于文档,它看起来并没有生成我想要使用的解析对象。有什么建议吗?在
(不需要使用lxml,但我希望使用Python,而且理想情况下,我希望它速度更快。)
Iterparse仍然需要解析所有内容,直到您想要的子树为止。在使用正则表达式将子树输入解析器之前,提取子树可能更有效。您可能想尝试编写一个sax解析器。Sax可能比lxml慢,但它不会占用太多内存,所以在某些情况下可能会更好。在
我觉得iterparse就是你想要的。看看http://lxml.de/parsing.html上的“选择性标记事件”一节,你似乎得到了你想要的:
XPath似乎也可以工作,但我猜XPath在返回之前会读取整个树,而我希望iterparse只遍历树,直到找到匹配的树为止。这两种方法值得分析。在
相关问题 更多 >
编程相关推荐