用 Python 解析天气 XML

Parsing Weather XML with Python

我是初学者,但我付出了很多努力,试图从名为 "weather.xml" 的 .xml 文件中解析一些有关天气的数据,该文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Weather>
<locality name="Rome" alt="21">
    <situation temperature="18°C" temperatureF="64,4°F" humidity="77%" pression="1016 mb" wind="5 SSW km/h" windKN="2,9 SSW kn">
        <description>clear sky</description>
        <lastUpdate>17:45</lastUpdate>
        />
    </situation>
    <sun sunrise="6:57" sunset="18:36" />
</locality>

我从这个 XML 中解析了一些数据,这就是我的 Python 代码现在的样子:

#!/usr/bin/python

from xml.dom import minidom
xmldoc = minidom.parse('weather.xml')

entry_situation = xmldoc.getElementsByTagName('situation')
entry_locality = xmldoc.getElementsByTagName('locality')

print entry_locality[0].attributes['name'].value
print "Temperature: "+entry_situation[0].attributes['temperature'].value
print "Humidity: "+entry_situation[0].attributes['humidity'].value
print "Pression: "+entry_situation[0].attributes['pression'].value

它工作正常,但是如果我尝试用相同的方法解析来自 "description" 或 "lastUpdate" 节点的数据,我会得到一个错误,所以这种方式对于那些实际上我的节点来说一定是错误的可以看出它们是不同的。

我也在尝试将输出写入日志文件但没有成功,我得到的最多是一个空文件。

感谢您花时间阅读本文。

因为"description"和"lastUpdate"不是属性而是"situation"节点的子节点

尝试:

d = entry_situation[0].getElementsByTagName("description")[0]
print "Description: %s" % d.firstChild.nodeValue

您应该使用相同的方法从其父节点 "locality" 访问 "situation" 节点。

顺便说一下,您应该看一下 lxml 模块,尤其是 yegorich 所说的对象化 API。使用起来更方便。