如果我举个例子,也许我能最好地解释:假设以下内容-我认为这是XML在Web服务中(错误)使用的一个很好的例子-
是我从http请求到http://www.google的响应.com
/ ig / api?weather = 94043
<xml_api_reply version="1">
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" >
<forecast_information>
<city data="Mountain View, CA"/>
<postal_code data="94043"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2010-06-23"/>
<current_date_time data="2010-06-24 00:02:54 +0000"/>
<unit_system data="US"/>
</forecast_information>
<current_conditions>
<condition data="Sunny"/>
<temp_f data="68"/>
<temp_c data="20"/>
<humidity data="Humidity: 61%"/>
<icon data="/ig/images/weather/sunny.gif"/>
<wind_condition data="Wind: NW at 19 mph"/>
</current_conditions>
...
<forecast_conditions>
<day_of_week data="Sat"/>
<low data="59"/>
<high data="75"/>
<icon data="/ig/images/weather/partly_cloudy.gif"/>
<condition data="Partly Cloudy"/>
</forecast_conditions>
</weather>
</xml_api_reply>
加载/解析此类文档后,我希望能够像说的那样简单地访问信息
>>> xml['xml_api_reply']['weather']['forecast_information']['city'].data
'Mountain View, CA'
要么
>>> xml.xml_api_reply.weather.current_conditions.temp_f['data']
'68'
从我到目前为止所看到的,这似乎ElementTree
是最接近我梦想的。但这还不存在,使用XML时仍然有些麻烦。OTOH,我想的并不是那么复杂-
可能只是解析器之上的薄薄的单板-但这可以减少处理XML的烦恼。有这样的魔术吗?(如果没有,为什么?)
PS。请注意,我已经尝试过BeautifulSoup
了,尽管我喜欢它的方法,但是它存在空<element/>
s的实际问题-请参阅以下注释中的示例。
您想要薄木皮吗?这很容易煮。尝试以下围绕ElementTree的琐碎包装器作为起点:
# geetree.py
import xml.etree.ElementTree as ET
class GeeElem(object):
"""Wrapper around an ElementTree element. a['foo'] gets the
attribute foo, a.foo gets the first subelement foo."""
def __init__(self, elem):
self.etElem = elem
def __getitem__(self, name):
res = self._getattr(name)
if res is None:
raise AttributeError, "No attribute named '%s'" % name
return res
def __getattr__(self, name):
res = self._getelem(name)
if res is None:
raise IndexError, "No element named '%s'" % name
return res
def _getelem(self, name):
res = self.etElem.find(name)
if res is None:
return None
return GeeElem(res)
def _getattr(self, name):
return self.etElem.get(name)
class GeeTree(object):
"Wrapper around an ElementTree."
def __init__(self, fname):
self.doc = ET.parse(fname)
def __getattr__(self, name):
if self.doc.getroot().tag != name:
raise IndexError, "No element named '%s'" % name
return GeeElem(self.doc.getroot())
def getroot(self):
return self.doc.getroot()
您可以这样调用它:
>>> import geetree
>>> t = geetree.GeeTree('foo.xml')
>>> t.xml_api_reply.weather.forecast_information.city['data']
'Mountain View, CA'
>>> t.xml_api_reply.weather.current_conditions.temp_f['data']
'68'
问题内容: 我到处都看过,发现有数百万个python代理服务器,但是没有一个服务器可以完全满足我的要求(我认为:s) 一般而言,我在python方面有很多经验,但是对于HTTP协议深层的秘密我还是很陌生。 我认为可能有用的是可以连接到一个非常简单的代理示例,然后将自己尝试连接到传递给它的地址。 另外,我认为让隐藏的东西正在做的事情让我感到困惑,例如,如果该类继承自BaseHTTPServer.Ba
问题内容: 我正在尝试从Flickr中读取RSS提要,但它具有一些不能被Simple XML读取的节点(,等等)。 我该如何解决?当我查看DOM文档时,我的头很痛。所以我想避免这种情况,因为我不想学习。 我正在尝试获取缩略图。 问题答案: 解决方案在这篇不错的文章中进行了解释。您需要用于访问包含名称空间的XML元素的方法。此代码段摘自该文章:
本文向大家介绍python简单文本处理的方法,包括了python简单文本处理的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python简单文本处理的方法。分享给大家供大家参考。具体如下: 由于有多线程的影响,c++项目打印出来的时间顺序不一致,导致不太好在excel中统计,故使用python写了段脚本来解决之。涉及到如下方面 1. txt文本的读取,utf8的处理 2. 字符串的基
在使用swift教程时,我开始编写一个自定义的方法来检查给定的是否为素数。 在编写完它之后,我意识到它工作正常,但发现在一些相当大的数字上执行有点慢(仍然比)。 所以我用objc编写了相同的代码,并且代码的执行速度快得多(是66倍)。 以下是swift代码: 和对象代码: 在中: 这就产生了:
本文向大家介绍使用Python处理Excel表格的简单方法,包括了使用Python处理Excel表格的简单方法的使用技巧和注意事项,需要的朋友参考一下 Excel 中的每一个单元,都会有这些属性:颜色(colors)、number formatting、字体(fonts)、边界(borders)、alignment、模式(patterns) 等等。 xlsxwriter 格式处理,将待添加数据转换
本文向大家介绍Python简单日志处理类分享,包括了Python简单日志处理类分享的使用技巧和注意事项,需要的朋友参考一下 简单的一个python日志处理类