我用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实现中它不起作用吗?“解析器”参数在ElementTree发布时已经在cElementTree中了。
发布于 2013-12-11 20:22:41
有人知道为什么在C实现中它不起作用吗?
嗯,是的,因为不工作是http://docs.python.org/2.7/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse:
cElementTree不支持解析器。
但他们为什么不让它起作用呢?
并入Python2.5的ElementTree版本在iterparse上没有parser参数。此特性仅在Python3.2中添加。然后,它被移植到Python2.7.*(注意,它不在2.6中)。
Python3.x没有cElementTree-instead,它只有一个ElementTree实现,只要有可能就使用C加速代码。因此,将新特性移植到cElementTree比向ElementTree提供更多的工作。想必这对任何人来说都不够重要。
另外,请注意,ElementTree是在Python之外开发和维护的,由Frederik,这里完成。我相信格雷戈里·P·史密斯( Gregory P. Smith )推动了整合到stdlib的工作,但我可能错了。因此,您可以询问其中任何一个,或者在python列表中询问,如果需要更多的详细信息。但我很肯定答案将是“这不重要到足以费心去做”。
*从技术上讲,它是在Python1.3中添加的,该版本包含在Python3.2和2.7中。请参阅2.7和3.2的新文档。
https://stackoverflow.com/questions/20528990
复制相似问题