Skip to main content
 首页 » 编程设计

python之只解析 XML 文件的特定子树

2025年05月04日12开发

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

理想情况下,我想扫描文件直到找到该子树的开头,解析子树直到到达它的末尾,然后甚至懒得阅读文件的其余部分。甚至可以用 XPath 表达式描述我感兴趣的子树。有没有办法使用 lxml 来做到这一点? ?看起来您可以使用 iterparse() 方法执行类似的操作,但根据文档,它看起来不会生成我想要使用的已解析对象。有什么建议吗?

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

请您参考如下方法:

我的印象是 iterparse 就是您想要的。在 http://lxml.de/parsing.html 查看“选择性标记事件”部分这似乎给了你想要的东西:

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

似乎 XPath 也可以工作,但我猜想 XPath 在返回之前读取整棵树,而我希望 iterparse 只遍历树直到它有匹配项。值得分析这两种方法。