将返回的XML数据快速轻松地放入字典的方法是什么?

2 投票
3 回答
1121 浏览
提问于 2025-04-15 21:13

我正在尝试把以下返回的数据:

http://ipinfodb.com/ip_query.php?ip=74.125.45.100&timezone=true

快速且简单地放入一个字典里。请问有什么好的方法吗?

谢谢。

3 个回答

0

从Python 2.5开始,标准库里有一个叫做xml.etree的模块。你也可以看看lxml,它的使用方式和这个模块差不多。我没有深入研究过,但我觉得这个链接里的内容也适用于Python 2.5及以上版本

编辑:

这是一个快速且非常简单的解析XML的方法。虽然不太适合把数据放到字典里,但这个接口用起来很直观。

2

我会使用内置的xml.dom模块,大概是这样的:

import urllib
from xml.dom import minidom

data = urllib.urlopen('http://ipinfodb.com/ip_query.php?ip=74.125.45.100&timezone=true')
xml_data = minidom.parse(data)
my_dict ={}
for node in xml_data.getElementsByTagName('Response')[0].childNodes:
    if node.nodeType != minidom.Node.TEXT_NODE:
        my_dict[node.nodeName] = node.childNodes[0].data
8

使用标准Python库里的xml

import xml.etree.ElementTree as xee
contents='''\
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Ip>74.125.45.100</Ip>
  <Status>OK</Status>
  <CountryCode>US</CountryCode>
  <CountryName>United States</CountryName>
  <RegionCode>06</RegionCode>
  <RegionName>California</RegionName>
  <City>Mountain View</City>
  <ZipPostalCode>94043</ZipPostalCode>
  <Latitude>37.4192</Latitude>
  <Longitude>-122.057</Longitude>
  <TimezoneName>America/Los_Angeles</TimezoneName>
  <Gmtoffset>-25200</Gmtoffset>
  <Isdst>1</Isdst>
</Response>'''

doc=xee.fromstring(contents)
print dict(((elt.tag,elt.text) for elt in doc))

或者使用lxml库:

import lxml.etree
import urllib2
url='http://ipinfodb.com/ip_query.php?ip=74.125.45.100&timezone=true'
doc = lxml.etree.parse( urllib2.urlopen(url) ).getroot()
print dict(((elt.tag,elt.text) for elt in doc))

撰写回答