Python:XPath 在 ElementTree 中不可用

Posted

技术标签:

【中文标题】Python:XPath 在 ElementTree 中不可用【英文标题】:Python: xPath not available in ElementTree 【发布时间】:2012-11-07 11:38:55 【问题描述】:

我正在尝试使用 iterparse()ElementTree 解析 iTunes 播放列表,但出现以下错误:

AttributeError: 'Element' object has no attribute 'xpath'

代码如下:

import xml.etree.ElementTree as ET
context = ET.iterparse(file,events=("start", "end"))
    # turn it into an iterator
    context = iter(context)
    # get the root element
    event, root = context.next()
    for event, elem in context:
        z = elem.xpath(".//key")
        elem.clear()
        root.clear()
    print z

我做错了什么?文件太大,所以我必须使用iterparse()

【问题讨论】:

尝试elem.findall(".//key") 而不是elem.xpath(".//key") elem.clear() 会移除所有子元素。您是否尝试过删除 elem.clear()root.clear() 并将 print z inside for 循环? 好的,是的,当我评论 clear() 代码时,它会在循环内返回。你有什么建议? 为什么需要clear()方法调用? 我在这里读到:effbot.org/zone/element-iterparse.htm 它是针对 lxml 的。我认为内置库中的 elementTree 也会有问题。检查标题增量解析 【参考方案1】:

xml.etree.ElementTree provides limited support for XPath expressions 用于其 Elementfindfindallfindtext 方法(没有 xpath 方法:这就是您收到错误的原因)。

此外,如果您在元素上调用 clear() 以节省使用的内存,则只需处理完该元素及其所有子元素后执行此操作。

因此,您需要将代码更改为类似于以下内容:

for event, elem in context:
    for child in elem.findall(".//key"):
        # process child
    elem.clear()
    root.clear()

【讨论】:

感谢您的慷慨帮助。

以上是关于Python:XPath 在 ElementTree 中不可用的主要内容,如果未能解决你的问题,请参考以下文章

python xpath

Python——XPath使用

Python爬虫--Xpath

python爬虫xpath的语法

Python解析库lxml与xpath用法总结

XPath在python中的高级应用