在cElementTree中压缩名称空间前缀

时间:2013-09-25 18:35:42

标签: python xml elementtree celementtree

在python 2.6中,我需要压缩名称空间前缀。我使用了here发布的解决方案,但是,当我使用cElementTree代替更快的解析时,它会中断。从我的日志:

25/09/2013 20:04:05 'module' object has no attribute '_namespace_map'

两种实现之间是否存在一些潜在的差异?还有另一种解决方法吗?我有的模块版本:

>>> import xml.etree.ElementTree as et
>>> et.VERSION
'1.2.6'
>>> import xml.etree.cElementTree as cet
>>> cet.VERSION
'1.0.6'
>>> 

谢谢!

1 个答案:

答案 0 :(得分:1)

没有理由期望这种方法有效。 jterrace在ElementTree的内部挖掘出来,并想出了一个直接作用于内部的hacky worakround。你试图在不同的实现上使用它,具有不同的内部,所以当然它不会起作用。


但是......如果你看一下the source to cElementTree,你可以看到它处理命名空间注册的方式是...执行一些导入ElementTree并使用命名空间的Python代码注册表中。所以,而不是:

import xml.etree.cElementTree as etree

# ...

if namespace_uri not in etree._namespace_map:

您可以只导入两者,然后从ElementTree而不是cElementTree访问它。例如:

import xml.etree.cElementTree as etree
import xml.etree.ElementTree

# ...

if namespace_uri not in ElementTree._namespace_map:

(显然对其他参考文献也一样。)

不保证这会起作用。它会让你通过这个错误,但你必须阅读代码,看看替换fixtag是否会对你想要的cElementTree产生相同的效果,或者是否还有其他事情要做。