2014-01-15 6 views
0

iterparse를 사용하여 xml 문서를 구문 분석합니다.Iterparse는 xml을 기본 네임 스페이스로 구문 분석 할 때 빈 iterable을 반환합니다.

from lxml import etree 
import tempfile 

content = """<root xmlns="blah.com"> 
    <foo> 
     <attribute id="3" /> 
    </foo> 
    <foo> 
     <structure> 
     <baz> 
      <x>g</x> 
     </baz> 
     </structure> 
    </foo> 
</root>""" 

src_file = tempfile.NamedTemporaryFile() 
src_file.write(content) 
src_file.flush() 

context = etree.iterparse(
     src_file.name, 
     events=("end",), 
     tag="foo", 
    ) 

for event, element in context: 
    print event 
    print element 
  • 예상 결과 : 나는 네임 스페이스를 제거하면

    • : 아무것도 내가 시도

    몇 가지 변화가 없습니다 : 나는 몇 end 이벤트가

  • 실제 결과보고 XML, 잘 작동합니다.
  • 접두어가 xlmns:t="blah.com" 인 네임 스페이스를 사용하면 잘 작동합니다.
  • tag="foo"을 제거하면 정상적으로 작동합니다.

그러나 기본 태그와 기본 네임 스페이스를 모두 사용하고 싶습니다. iterparse 버그인가요? 내가 뭔가 잘못하고 있는거야?

편집 : 코드를 수정하여 ident 오류없이 복사하여 붙여 넣을 수 있도록합니다.

답변

1

아, 파서의 문제! 태그에는 전체 경로가 반영되어야합니다. 태그에서 네임 스페이스를 다음과 같이 사용하십시오 : tag="{blah.com}foo".

+0

감사합니다. 그거야. –