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

时间:2013-12-11 20:11:47

标签: python xml-parsing celementtree

我使用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中了。

1 个答案:

答案 0 :(得分:1)

  

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

嗯,是的,因为documented无效:

  cElementTree不支持

解析器

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

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

Python 3.x没有cElementTree - 相反,它只有一个ElementTree实现,并且尽可能使用C加速器代码。因此,将新功能向后移植到cElementTree比向ElementTree移植要多得多。并且可能对任何人来说都不够重要。

另外,请注意,ElementTree是由Frederik Lundh here在Python的stdlib之外开发和维护的。我相信Gregory P. Smith推动了整合到stdlib的工作,但我可能错了。因此,您可以询问其中任何一个,或者询问python-dev列表,是否需要更多详细信息。但我很确定答案只是“它不够重要,无法做到”。


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