2009-11-09 127 views
26

我喜歡ElementTree分析xml的方式,特別是Xpath功能。我有一個來自應用程序嵌套標記的xml輸出。python:xml.etree.ElementTree,刪除「命名空間」

我想通過名稱訪問這個標籤而不指定名稱空間,這有可能嗎? 比如:

root.findall("/molpro/job") 

代替:

root.findall("{http://www.molpro.net/schema/molpro2006}molpro/{http://www.molpro.net/schema/molpro2006}job") 
+1

我想添加一個註釋,在我的示例中,命名空間是相同的,但在整個Xml文件中還有其他的變量命名空間。我只想關閉此功能,就像在xml.dom.minidom解析器中一樣。 – pygabriel

回答

8

至少有lxml2,有可能在一定程度上減少這種開銷:

root.findall("/n:molpro/n:job", 
      namespaces=dict(n="http://www.molpro.net/schema/molpro2006")) 
5

你可以寫自己的函數來包裝令人討厭的位,例如:

def my_xpath(doc, ns, xp); 
    num = xp.count('/') 
    new_xp = xp.replace('/', '/{%s}') 
    ns_tup = (ns,) * num 
    doc.findall(new_xp % ns_tup) 

namespace = 'http://www.molpro.net/schema/molpro2006' 
my_xpath(root, namespace, '/molpro/job') 

我不承認,但至少你可以閱讀你的xpath表達式。