2014-01-15 66 views
0

我正在使用iterparse解析xml文檔。當使用默認名稱空間解析xml時,Iterparse返回空迭代

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的bug嗎?我在做別的事嗎?

編輯:編輯代碼,使其無需標識錯誤即可複製粘貼。

回答

1

啊解析器的問題!您的標籤還必須反映完整的路徑。在標籤中使用您的名稱空間,如下所示:tag="{blah.com}foo"

+0

謝謝!這樣可行。 –