使用Python解析天气XML

时间:2016-10-05 07:01:56

标签: python xml minidom

我是初学者,但我付出了很多努力,我试图从名为“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”节点解析数据,我会收到错误,所以这种方式对于那些实际上我看到它们是不同的节点一定是错误的。

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

感谢您抽出宝贵时间阅读本文。

1 个答案:

答案 0 :(得分:1)

这是因为&#34;描述&#34;和&#34; lastUpdate&#34;不是属性,而是&#34;情境的子节点&#34;节点

尝试:

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

您应该使用相同的方法来访问&#34;情况&#34;来自其父级的节点&#34; locality&#34;。

顺便说一下,你应该看看lxml模块,特别是obgorctify API,因为yegorich说。它更容易使用。