2016-07-29 63 views
0

這是一個類似文件的對象toc的內容:如何從Python3中的類文件xml對象查找節點?

<?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

由於XML中存在(默認)名稱空間,因此搜索名爲docTitle的元素將找不到任何內容,因爲它正在搜索名爲docTitle的未命名空間元素。相反,您需要使用具有完整名稱空間URI的克拉克符號:

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

它的工作原理!謝謝。我可以在'find'方法中使用'namespace ='嗎? – iamlazynic

+0

https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.find –

+0

如何將'docTitle'替換爲'text','find'方法返回什麼都沒有? – iamlazynic