cElementTree.interparse() 不接受自定义解析器



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

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

不起作用。你会看到这样的东西:

__init__() got an unexpected keyword argument 'parser'

同时,"xml.etree.EElementTree.iterparse"的相同构造也可以工作。

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

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

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

嗯,是的,因为记录了不起作用:

cElementTree不支持解析器

但他们为什么不让它发挥作用呢?

Python 2.5中包含的ElementTree版本在iterparse上没有parser参数。此功能仅在Python 3.2中添加。然后,它被后移植到Python2.7.*(注意,2.6中没有它。)

Python3.x没有cElementTree——相反,它只有一个ElementTree实现,它尽可能使用C加速器代码。因此,将新功能备份到cElementTree要比备份到ElementTree多得多。大概这对任何人来说都不够重要。

此外,请注意,ElementTree是由Frederik Lundh在Python的stdlib之外开发和维护的。我相信Gregory P.Smith推动了stdlib工作的集成,但我可能错了。所以,如果你想要更多的细节,你可以问他们中的任何一个,或者在python开发列表上问。但我敢肯定,答案只是"这还不够重要,不值得去做"。


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

最新更新