2013-12-11 45 views
0

我使用ElementTree在Python上解析XML文件。我发现cElementTree的C实现与常规实现相比非常快速。但我也发现建设:cElementTree.interparse()不接受自定义分析器

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

不会工作。你会看到类似这样的:

__init__() got an unexpected keyword argument 'parser' 

同时相同的结构与“xml.etree.ElementTree.iterparse”确实工作。

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

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

+0

为什么你需要一个自定义分析器? iterparse的要点是,任何定制都由调用它的代码完成,而不是隐藏在解析器的状态机中。 – user4815162342

+0

解析XML文件时保存注释 –

+2

[documentation](http://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse)明确指出:'如果不是给定的,使用标准的XMLParser解析器。语法分析器不被cElementTree支持' – karthikr

回答

0

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

嗯,是的,因为它的documented到不行:

解析器cElementTree支持。

但为什么他们没有使它的工作?

合并到Python 2.5中的ElementTree的版本在iterparse上没有parser参数。该功能仅在Python 3.2中添加。然后,将其向后移植到Python 2.7。*(请注意,它不存在于2.6

的Python 3.X没有cElementTree -instead,它只是有一个ElementTree执行情况,它使用的地方Ç加速器代码可能。因此,将新功能支持到cElementTree比将ElementTree支持更多的工作。大概这对于任何人来说都不够重要。

另外,请注意,ElementTree是由Frederik Lundh,here在Python的stdlib之外开发和维护的。我相信格雷戈里P.史密斯推动整合到stdlib工作,但我可能是错的。所以,你可以问任何一个,或者在python-dev列表中询问是否需要更多细节。但我很确定答案只会是“这不足以打扰你做”。


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