2013-09-25 4 views
0

파이썬 2.6에서는 네임 스페이스 접두어를 사용하지 않아야합니다. here 게시 된 솔루션을 사용하고 작동하지만, 빠른 구문 분석 대신 cElementTree를 사용하면 작동하지 않습니다. 내 기록 :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' 
>>> 

감사합니다!

+0

'ElementTree'의 문서화되지 않은 구현 내부를 파고 들었습니다. 'cElementTree'는 다른 구현체이므로 같은 내부 구조를 가지지 않을 것입니다. – abarnert

답변

1

작동하지 않을 이유가 없습니다. jterrace는 ElementTree의 내부를 파고 그 내부 구조에 직접적으로 영향을 미치는 고질적 인 worakround를 만들었습니다. 다른 구현에서 다른 내부 구조를 사용하려고 시도하고 있으므로 당연히 작동하지 않을 것입니다. 당신이 the source to cElementTree 보면


하지만 ... 당신은 ... 그것은 네임 스페이스 등록을 처리하는 방식이라고 볼 수 ElementTree을 가져오고 네임 스페이스 레지스트리를 사용하여 일부 파이썬 코드를 실행합니다. 그래서, 대신의 :

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에 대해 동일한 효과가 있는지 또는 수행해야 할 다른 작업이 있는지 확인해야합니다.