2014-03-31 73 views
3

我有一個有效的XHTML文件中查找。當我做ElementTree的和使用命名空間

import xml.etree.ElementTree as ET 
print ET._namespace_map 

它列出:

'http://www.w3.org/1999/xhtml': 'html' 

當我這樣做:

root.find('{http://www.w3.org/1999/xhtml}head') 

發現:

<Element '{http://www.w3.org/1999/xhtml}head' at 0x104647168> 

但是當我做:

root.find('html:head') 

它抱怨:

SyntaxError: prefix 'html' not found in prefix map 

是否可以找到使用語法ns:elementfind一個命名空間的元素?

回答

4

應指定namespaces說法:

namespaces = {'html': 'http://www.w3.org/1999/xhtml'} 
root.find('html:head', namespaces=namespaces) 

另見:

+0

好,它的工作原理,謝謝!但是'register_namespace'或'_namespace_map'有什麼好處呢? –

+0

@EcirHana'register_namespace()'本質上是一種新的方式操作'_namespace_map'的(ElementTree的> = 1.3),看看它們是什麼好[這裏](http://effbot.org/zone/element-namespaces.htm )。希望有所幫助。 – alecxe