在XML文档中搜索命名空间中的元素

时间:2014-07-01 05:28:19

标签: python xml python-2.7 elementtree

以下是我的代码:

import requests
import xml.etree.ElementTree as ET

r = requests.get("http://www.volcano.si.edu/news/WeeklyVolcanoRSS.xml")
tree = ET.fromstring(r.text.encode('utf-8'))
for pt in tree.findall('.//georss:point'):
    print (pt.text)

问题是:被视为前缀错误:

File "C:\Python27\lib\xml\etree\ElementPath.py", line 83, in xpath_tokenizer
raise SyntaxError("prefix %r not found in prefix map" % prefix)
SyntaxError: prefix 'georss' not found in prefix map

添加反斜杠以逃避角色:

for pt in tree.findall('.//georss\:point'):

...它给出了另一个错误:

SyntaxError: prefix 'georss\\' not found in prefix map

我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

XML标记中的冒号是XML命名空间。

检查源文档中是否有xmlns:georss="<URL>"等属性。 URL是您的命名空间。

请参阅:parse .xml with prefix's on tags? xml.etree.ElementTree

答案 1 :(得分:1)

您需要通过向findall()方法添加参数来指定命名空间。试试这个:

import requests
import xml.etree.ElementTree as ET

r = requests.get("http://www.volcano.si.edu/news/WeeklyVolcanoRSS.xml")
tree = ET.fromstring(r.text.encode('utf-8'))
namespaces = {'georss' : 'http://www.georss.org/georss'}
for pt in tree.findall('.//georss:point', namespaces=namespaces):
    print (pt.text)