【问题标题】:Searching an XML document for an element in a namespace在 XML 文档中搜索命名空间中的元素
【发布时间】:2014-07-01 05:28:18
【问题描述】:

以下是我的代码:

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

我该怎么做呢?

【问题讨论】:

    标签: python xml python-2.7 elementtree


    【解决方案1】:

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

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

    见:parse .xml with prefix's on tags? xml.etree.ElementTree

    【讨论】:

      【解决方案2】:

      您需要通过向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)
      

      【讨论】:

      • 这不适用于 python 2.6。有没有其他办法?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2014-06-10
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多