Python 在具有名称空间的xml文件中使用lxml库的Xpath问题

Python 在具有名称空间的xml文件中使用lxml库的Xpath问题,python,xml,xpath,lxml,xml-namespaces,Python,Xml,Xpath,Lxml,Xml Namespaces,我试图使用名称空间从xml文件中选择一个xml节点。我已经有了一个选择,但无法让它为第二个工作 这是简化的xml(在python代码中存储为BookMetaData): 我尝试过但不起作用的东西: namspace“”使用了两次,一次在不带前缀的“包”中,一次在带前缀的“元数据”中。因此,在名称空间中添加另一个前缀将无济于事 有人能帮我吗?如果您只是在xpath语句中添加opf前缀 //opf:meta[@name='calibre:user_metadata:#origfieldvalue']

我试图使用名称空间从xml文件中选择一个xml节点。我已经有了一个选择,但无法让它为第二个工作

这是简化的xml(在python代码中存储为BookMetaData):

我尝试过但不起作用的东西:
namspace“”使用了两次,一次在不带前缀的“包”中,一次在带前缀的“元数据”中。因此,在名称空间中添加另一个前缀将无济于事


有人能帮我吗?

如果您只是在xpath语句中添加opf前缀

//opf:meta[@name='calibre:user_metadata:#origfieldvalue']

这似乎奏效了

谢谢,成功了!尽管我不明白为什么如果Xpath不在我试图匹配的xml节点中,那么有必要将前缀添加到Xpath中。你能解释一下吗?或者给我一个链接,我可以从那里开始搜索解释?
#!/usr/bin/python
# All imports
import lxml.html
import lxml.etree

# namespaces
theNamespaces = {'opf' : "http://www.idpf.org/2007/opf", 
'dc' : "http://purl.org/dc/elements/1.1/", 
'calibre' : "http://calibre.kovidgoyal.net/2009/metadata",
'unique-identifier' : "calibre_id" }

# This part is working perfectly
theXMLdoc = lxml.etree.fromstring(BookMetaData)
theElement2 = theXMLdoc.xpath("//dc:title", namespaces = theNamespaces)[0]
print "lxml.html Source Value:"
print( theElement2.text)
print ""


# This part only returns an emtpy list
theOrigValueElement = theXMLdoc.xpath("//meta[@name='calibre:user_metadata:#origfieldvalue']", namespaces = theNamespaces)
print "Original value of OrigFieldValue:"
print( theOrigValueElement)
print ""
//opf:meta[@name='calibre:user_metadata:#origfieldvalue']