Python ElementTree findall 不起作用

Chr*_*ung 3 python xml elementtree findall

所以我试图解析一些开放数据来构建数据库。\n这就是我所做的:

\n\n
# -*- coding: utf-8 -*-\nimport urllib\nimport xml.etree.ElementTree as ET\n\nurl = \'http://opendata.cwb.gov.tw/govdownload?dataid=C-A0008-001&authorizationkey=rdec-key-123-45678-011121314\'\n\nroot = ET.parse(urllib.urlopen(url)).getroot()\n\nlocations = root.findall(\'dataset/location\')\nprint type(locations)\nprint "Counts:", len(locations)\n
Run Code Online (Sandbox Code Playgroud)\n\n

它返回:

\n\n
Counts: 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试解析其他一些 xml 数据(更改 url),效果很好

\n\n

我正在处理的 xml 数据大致如下:

\n\n
<?xml version="1.0" encoding="UTF-8"?><cwbopendata xmlns="urn:cwb:gov:tw:cwbcommon:0.1">\n<identifier>0f819d32-297a-4512-9654-990a565bd080</identifier>\n<sender>weather@cwb.gov.tw</sender>\n<sent>2016-05-23T16:07:06+08:00</sent>\n<status>Actual</status>\n<msgType>Issue</msgType>\n<dataid>CWB_A0008</dataid>\n<scope>Public</scope>\n<dataset>\n    <location>\n        <stationId>72C44</stationId>\n        <time>\n        <dataTime>105 4_2</dataTime>\n        </time>\n        <weatherElement>\n        <elementName>\xe5\xb9\xb3\xe5\x9d\x87\xe6\xb0\xa3\xe6\xba\xab</elementName>\n        <elementValue>\n        <value>21.1</value>\n        </elementValue>\n        .\n        .\n        .\n    </location>\n    <location>\n    .\n    .   \n    .\n
Run Code Online (Sandbox Code Playgroud)\n\n

抱歉,我是 python 和 ElementTree 的新手,希望得到一些好的建议,谢谢

\n

har*_*r07 11

您的 XML 具有默认命名空间,其 URI 为“urn:cwb:gov:tw:cwbcommon:0.1”。因此,在声明了默认命名空间的元素内,所有没有前缀的元素都将被考虑在该命名空间中:

>>> ns = {'d': 'urn:cwb:gov:tw:cwbcommon:0.1'}
>>> locations = root.findall('d:dataset/d:location', ns)
>>> print "Counts:", len(locations)
Counts: 17
Run Code Online (Sandbox Code Playgroud)

相关:通过“ElementTree”在 Python 中解析带有名称空间的 XML