如何使用python解析此xml?
我尝试了很多方法,但仍然无法从中提取数据如何使用python解析此xml?,python,xml,lxml,Python,Xml,Lxml,我尝试了很多方法,但仍然无法从中提取数据 <?xml version="1.0" encoding="UTF-8"?><cwbopendata xmlns="urn:cwb:gov:tw:cwbcommon:0.1"> <identifier>CWB_ANNUAL_DATA_20161017134902</identifier> <sender>weather@cwb.gov.tw</sender> <sent&
<?xml version="1.0" encoding="UTF-8"?><cwbopendata xmlns="urn:cwb:gov:tw:cwbcommon:0.1">
<identifier>CWB_ANNUAL_DATA_20161017134902</identifier>
<sender>weather@cwb.gov.tw</sender>
<sent>2016-10-17 13:51+08:00</sent>
<status>Actual</status>
<msgType>Issue</msgType>
<dataid>CWB_B0024-002</dataid>
<scope>Public</scope>
<dataset>
<location>
<locationName>BANQIAO,板橋</locationName>
<stationId>466880</stationId>
<weatherElement>
<elementName>逐時觀測</elementName>
<time>
<obsTime>2015-10-17 01:00</obsTime>
<weatherElement>
<elementName>測站氣壓</elementName>
<elementValue>
<value>1012.9</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>溫度</elementName>
<elementValue>
<value>23.2</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>相對濕度</elementName>
<elementValue>
<value>68</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風速</elementName>
<elementValue>
<value>3.9</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風向</elementName>
<elementValue>
<value>東北東,ENE</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>降水量</elementName>
<elementValue>
<value>0.0</value>
</elementValue>
</weatherElement>
</time>
<time>
<obsTime>2015-10-17 02:00</obsTime>
<weatherElement>
<elementName>測站氣壓</elementName>
<elementValue>
<value>1012.7</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>溫度</elementName>
<elementValue>
<value>22.9</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>相對濕度</elementName>
<elementValue>
<value>69</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風速</elementName>
<elementValue>
<value>3.3</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風向</elementName>
<elementValue>
<value>東北東,ENE</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>降水量</elementName>
<elementValue>
<value>0.0</value>
</elementValue>
</weatherElement>
</time>
<time>
<obsTime>2015-10-17 03:00</obsTime>
<weatherElement>
<elementName>測站氣壓</elementName>
<elementValue>
<value>1012.5</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>溫度</elementName>
<elementValue>
<value>22.8</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>相對濕度</elementName>
<elementValue>
<value>70</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風速</elementName>
<elementValue>
<value>3.7</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風向</elementName>
<elementValue>
<value>東北東,ENE</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>降水量</elementName>
<elementValue>
<value>0.0</value>
</elementValue>
</weatherElement>
</time>
<time>
<obsTime>2015-10-17 04:00</obsTime>
<weatherElement>
<elementName>測站氣壓</elementName>
<elementValue>
<value>1012.4</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>溫度</elementName>
<elementValue>
<value>22.7</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>相對濕度</elementName>
<elementValue>
<value>70</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風速</elementName>
<elementValue>
<value>3.1</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風向</elementName>
<elementValue>
<value>東北東,ENE</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>降水量</elementName>
<elementValue>
<value>0.0</value>
</elementValue>
</weatherElement>
</time>
<time>
<obsTime>2015-10-17 05:00</obsTime>
<weatherElement>
<elementName>測站氣壓</elementName>
<elementValue>
<value>1012.6</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>溫度</elementName>
<elementValue>
<value>22.6</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>相對濕度</elementName>
<elementValue>
<value>71</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風速</elementName>
<elementValue>
<value>2.2</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>風向</elementName>
<elementValue>
<value>東北東,ENE</value>
</elementValue>
</weatherElement>
<weatherElement>
<elementName>降水量</elementName>
<elementValue>
<value>0.0</value>
</elementValue>
</weatherElement>
</time>
<time>
此部分成功地从location和stationId提取数据
data=[]
for elt in root.dataset.location:
el_data={}
skip_fields=['{urn:cwb:gov:tw:cwbcommon:0.1}weatherElement']
for child in elt.getchildren():
if child.tag in skip_fields:
continue
el_data[child.tag]=child.text
data.append(el_data)
这部分obsTime可以提取,但elmentName和elementValue不能从中提取
data=[]
for elt in root.dataset.location.weatherElement.time:
el_data={}
skip_field=['{urn:cwb:gov:tw:cwbcommon:0.1}time']
for child in elt.getchildren():
if child.tag in skip_field:
continue
el_data[child.tag]=child.text
for descendent in child.getchildren():
el_data[descendent.tag]=descendent.text
for next_descendent in descendent.getchildren():
el_data[next_descendent.tag]=next_descendent.text
data.append(el_data)
我建议使用此类型的任务
您要做的是:
- 从XML生成xsd架构文件(使用Visual Studio或)
- 使用pyxb生成绑定类(请参阅文档中的)。对于xsd文件,命令是:
python pyxbgen cwbopendata.xsd-m cwbopendata
- 使用该方法可以使用生成的绑定类
导入cwbopendata
导入pyxb
data=cwbopendata.CreateFromDocument(open('cwb_data_example.xml').read())
对于data.dataset.location.weatherElement.time中的t:
打印(t.obsTime)
有一行带有无效的结束标记:1012.7
我认为这是我的错误,我已经纠正了它。
data=[]
for elt in root.dataset.location.weatherElement.time:
el_data={}
skip_field=['{urn:cwb:gov:tw:cwbcommon:0.1}time']
for child in elt.getchildren():
if child.tag in skip_field:
continue
el_data[child.tag]=child.text
for descendent in child.getchildren():
el_data[descendent.tag]=descendent.text
for next_descendent in descendent.getchildren():
el_data[next_descendent.tag]=next_descendent.text
data.append(el_data)