将返回的 XML 数据放入字典中的简单快捷的方法是什么?

发布于 2024-08-27 20:14:39 字数 162 浏览 6 评论 0原文

我正在尝试以快速而简单的方式将从以下位置返回的数据放入

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

字典中。最好的方法是什么?

谢谢。

I'm trying to take the data returned from:

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

Into a dict in a fast and easy way. What's the best way to do this?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

死开点丶别碍眼 2024-09-03 20:14:39

使用标准 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))

Using xml from the standard Python library:

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))

Or using 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))
记忆消瘦 2024-09-03 20:14:39

我会使用内置的 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

I would use the xml.dom builtin, something like this:

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
是伱的 2024-09-03 20:14:39

xml.etree 来自从 python2.5 开始的标准库。另请查看具有相同接口的 lxml。我没有“深入”太多,但我认为 这也适用于 python >= 2.5也是。

编辑:

这是一种快速且非常简单的解析 xml 的方法,并不真正将数据放入字典中,但 api 非常直观。

xml.etree from standard library starting from python2.5. look also at lxml which has the same interface. I don't "dived in" to much but i think that this is also applicable to python >= 2.5 too.

Edit:

This is a fast and really easy way to parse xml, don't really put data to a dict but the api is pretty intuitive.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文