2010-04-04 4 views

ответ

8

Использование xml из стандартной библиотеки Python:

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

'lxml' принимает файл-подобный объект:' doc = lxml.etree.parse (urllib2.urlopen (url)). Getroot() ' – jfs

+0

@ J.F. Себастьян: Спасибо! – unutbu

+0

Так полезно ... спасибо !! – ensnare

0

xml.etree из стандартной библиотеки, начиная с python2.5. посмотрите также на lxml, который имеет тот же интерфейс. Я не «нырнул» во много, но думаю, что this is also applicable to python >= 2.5 too.

Edit:

Это быстрый и очень простой способ для синтаксического анализа XML, на самом деле не помещает данные в Словаре но апи довольно интуитивно.

+0

Привет - есть ли у вас образец кода для иллюстрации того, как это сделать? Благодарю. – ensnare

+0

@ensnare: Я неправильно понял ваш вопрос, я не понимал, что то, что вы искали, это кто-то, чтобы написать код для вас. –

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