这些是类文件对象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
方法返回None
。 findall
方法也不返回任何内容。请有人告诉我为什么?有没有更好的解决方案?
答案 0 :(得分:1)
因为XML中有一个(默认)命名空间,所以搜索名为docTitle
的元素将找不到任何内容,因为它正在搜索名为docTitle
的非命名空间元素。相反,您需要将clark表示法与完整名称空间URI一起使用:
toc_tree.find('{http://www.daisy.org/z3986/2005/ncx/}docTitle')