仅解析XML fi的特定子树

2024-09-30 20:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的XML文件。不过,我只对这棵巨树的一棵小子树感兴趣。我想解析这个子树,但我不想浪费时间分析整个大型树,因为我只会使用它的一小部分。在

理想情况下,我希望扫描整个文件,直到找到子树的开始,解析子树直到到达它的结尾,然后甚至不必费心阅读文件的其余部分。甚至可以用XPath表达式描述我感兴趣的子树。有没有一种方法可以使用lxml?看起来您可以使用iterparse()方法来完成类似的操作,但是基于文档,它看起来并没有生成我想要使用的解析对象。有什么建议吗?在

(不需要使用lxml,但我希望使用Python,而且理想情况下,我希望它速度更快。)


Tags: 文件方法表达式结尾情况费心xmllxml
2条回答

Iterparse仍然需要解析所有内容,直到您想要的子树为止。在使用正则表达式将子树输入解析器之前,提取子树可能更有效。您可能想尝试编写一个sax解析器。Sax可能比lxml慢,但它不会占用太多内存,所以在某些情况下可能会更好。在

我觉得iterparse就是你想要的。看看http://lxml.de/parsing.html上的“选择性标记事件”一节,你似乎得到了你想要的:

context = etree.iterparse(xmlfile, tag="yourSubTree")
action, elem = context.next()
etree.iterwalk(elem, ...)...

XPath似乎也可以工作,但我猜XPath在返回之前会读取整个树,而我希望iterparse只遍历树,直到找到匹配的树为止。这两种方法值得分析。在

相关问题 更多 >