2013-12-11 84 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的新增功能文檔。