我有以下几行的XML:
<?xml version="xxx"?>
<doc:document xmlns:doc="some value 1...">
<rdf:RDF xmlns:rdf="some value 2...">
<rdf:Description rdf:about="some value...">
<dct:format xmlns:dct="http://someurl/">some value 3</dct:format>
<dct:title xmlns:dct="http://someurl/">some text of interest to me</dct:title>
</rdf:Description>
</rdf:RDF>
</doc:document>
如何使用Python / ETree获取“我感兴趣的一些文本”?
提前感谢您的帮助!
答案 0 :(得分:1)
您需要通过指定命名空间来查找title
元素:
tree.find('.//dct:title', namespaces={'dct': 'http://purl.org/dc/terms/'})
您有在每次搜索时传递namespaces
映射,因此您也可以预先指定并重复使用:
nsmap = {
'dct': 'http://purl.org/dc/terms/',
'doc': 'http://www.witbd.org/xmlns/common/document/',
'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
}
tree.find('.//dct:title', namespaces=nsmap)
对于您的示例文档(已恢复名称空间),它给出了:
>>> tree.find('.//dct:title', namespaces=nsmap)
<Element '{http://purl.org/dc/terms/}title' at 0x105ec4690>
>>> tree.find('.//dct:title', namespaces=nsmap).text
'some text of interest to me'
您还可以在XPath表达式中使用命名空间:
tree.find('.//{http://purl.org/dc/terms/}title')
无论如何使用前缀和namespaces
地图在内部执行的操作。