0

我正在使用 iterparse 解析一个 xml 文档。

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 的错误吗?我做错了什么吗?

编辑:编辑代码以使其可复制粘贴而不会出现识别错误。

4

1 回答 1

1

啊解析器的问题!您的标签还必须反映完整的路径。在标签中使用您的命名空间,如下所示tag="{blah.com}foo"

于 2014-01-26T03:42:54.263 回答