0

我使用 ElementTree 在 Python 上解析 XML 文件。我发现 cElementTree 的 C 实现与常规实现相比工作得非常快。但我也发现了构造:

xml.etree.cElementTree.iterparse(filename, parser=MyCystomParser())

不会工作。你会看到类似的东西:

__init__() got an unexpected keyword argument 'parser'

同时,与 'xml.etree.ElementTree.iterparse' 相同的构造确实有效。

我在解析 XML 文件时使用自定义解析器来保留注释(默认解析器会忽略/删除它)。

有谁知道为什么在 C 实现中它不起作用?当 cElementTree 发布时,'parser' 参数已经在 ElementTree 中。

4

1 回答 1

1

有谁知道为什么在 C 实现中它不起作用?

好吧,是的,因为它被记录为不起作用:

不支持解析器cElementTree

但是他们为什么不让它工作呢?

并入 Python 2.5 的 ElementTree 版本没有parser关于iterparse. 此功能仅在 Python 3.2 中添加。然后它被反向移植到 Python 2.7.*(请注意,它在2.6中不存在。)

Python 3.x 没有cElementTree——相反,它只有一个ElementTree实现,它尽可能使用 C 加速器代码。因此,将新功能反向移植cElementTreeElementTree. 而且大概这还不够重要,任何人都不必费心去做。

另外,请注意 ElementTree 是在 Python 的 stdlib 之外开发和维护的,由 Frederik Lundh在这里。我相信 Gregory P. Smith 推动了集成到标准库的工作,但我可能是错的。所以,你可以问他们中的任何一个,或者在 python-dev 列表上询问,如果你想了解更多细节。但我很确定答案将是“这还不够重要,不必费心去做”。


* 从技术上讲,它是在 ElementTree 1.3 中添加的,该版本并入 Python 3.2 和 2.7。请参阅2.73.2的新增功能文档。

于 2013-12-11T20:22:41.123 回答