如何在 Google App Engine 上用 Python 解析 xml

Posted

技术标签:

【中文标题】如何在 Google App Engine 上用 Python 解析 xml【英文标题】:How to parse xml in Python on Google App Engine 【发布时间】:2011-06-01 05:05:20 【问题描述】:

对于这个following xml,我如何获取xml,然后解析它以获取<age> 的值?

<boardgames>
  <boardgame objectid="13">
  <yearpublished>1995</yearpublished>
  <minplayers>3</minplayers>
  <maxplayers>4</maxplayers>
  <playingtime>90</playingtime>
  <age>10</age>
  <name sortindex="1">Catan</name>
  ...

我目前正在尝试:

result = urlfetch.fetch(url=game_url)
xml = ElementTree.fromstring(result.content)

但我不确定我是否走在正确的道路上。当我尝试解析时出现错误(我认为是因为 xml 不是有效的 xml)。

【问题讨论】:

当我用urllib2抓取页面时工作正常:xml = ElementTree.fromstring(urllib2.urlopen('http://www.boardgamegeek.com/xmlapi/boardgam e/13').read()) 我正在获取 xml,但我不知道如何使用 ElementTree 来获取单个元素的值。那么如何获取 的值? 【参考方案1】:

xml.findtext('age')xml.findtext('boardgames/age') 通常会在 &lt;age&gt;10&lt;/age&gt; 中为您提供 10,但由于 xml 无效,解析似乎失败。根据我的经验,ElementTree 在解析无效 xml 方面做得相当差。

改为使用BeautifulSoup,它可以很好地处理无效的xml。

content = urllib2.urlopen('http://boardgamegeek.com/xmlapi/boardgame/13').read()
soup = BeautifulSoup(content)
print soup.find('age').string

【讨论】:

【参考方案2】:

以下对我有用:

import urllib2
from xml.etree import ElementTree

result = urllib2.urlopen('http://boardgamegeek.com/xmlapi/boardgame/13').read()
xml = ElementTree.fromstring(result)
print xml.findtext(".//age")

【讨论】:

以上是关于如何在 Google App Engine 上用 Python 解析 xml的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google App Engine app.yaml 中处理尾部斜线

如何在 Google Cloud Functions 和 Google App Engine 之间进行选择?

如何在 Google App Engine 中创建版本号

如何在 Google App Engine 中执行全文搜索?

如何在 Django/Google App Engine 中制作日志颜色?

如何在 Google App Engine 上部署 Ktor 应用程序?