如何在Python3中从类似文件的xml对象中查找节点?

时间:2016-07-29 09:55:59

标签: python xml elementtree

这些是类文件对象toc的内容:

<?xml version='1.0' encoding='utf-8'?>
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="eng">
    <head>
    ...
    </head>
    <docTitle>
        <text>THE_TEXT_I_WANT</text>
    </docTitle>

    ...
</ncx>

我的Python3代码现在:

import xml.etree.ElementTree as ET

# I get toc using open method in zipfile module
# toc : <zipfile.ZipExtFile name='toc.ncx' mode='r' compress_type=deflate>
toc_tree = ET.parse(toc)
for node in toc_tree.iter():
    print(node)
print(toc_tree.find('docTitle'))

for循环可以打印出所有节点,但find方法返回Nonefindall方法也不返回任何内容。请有人告诉我为什么?有没有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

因为XML中有一个(默认)命名空间,所以搜索名为docTitle的元素将找不到任何内容,因为它正在搜索名为docTitle的非命名空间元素。相反,您需要将clark表示法与完整名称空间URI一起使用:

toc_tree.find('{http://www.daisy.org/z3986/2005/ncx/}docTitle')