Разбор XML с Python с использованием ключа - PullRequest
0 голосов
/ 13 мая 2018

У меня есть следующий XML-файл

<GeocodeResponse>
   <status>OK</status>
   <result>
      <type>street_address</type>
      <formatted_address>277 Bedford Ave, Brooklyn, NY 11211, USA</formatted_address>
      <address_component>
         <long_name>277</long_name>
         <short_name>277</short_name>
         <type>street_number</type>
      </address_component>
      <address_component>
      <long_name>Bedford Avenue</long_name>
      <short_name>Bedford Ave</short_name>
      <type>route</type>
   </address_component>
   <address_component>
      <long_name>Williamsburg</long_name>
      <short_name>Williamsburg</short_name>
      <type>neighborhood</type>
      <type>political</type>
   </address_component>
   <address_component>
      <long_name>11211</long_name>
      <short_name>11211</short_name>
      <type>postal_code</type>
   </address_component>

Я хочу вернуть значение 11211, используя postal_code в качестве ключа.Как мне разобрать его и вернуть значение в виде строки?

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вы можете использовать BeautifulSoup .Я думаю, что это будет делать то, что вы хотите:

from bs4 import BeautifulSoup


def get_by_type(data, some_type):
    soup = BeautifulSoup(data, 'xml')
    components = soup.find('result').find_all('address_component')

    for c in components:
        if any(t for t in c.find_all('type') if t.text == some_type):
            return c.long_name.text


with open('data.xml') as f:
    data = f.read()

print(get_by_type(data, 'postal_code'))

Вы можете получить другие значения, просто изменив строку, заданную в качестве второго аргумента, на get_by_type.

0 голосов
/ 13 мая 2018

Используйте BeautifulSoup , есть много способов сделать это

import BeautifulSoup as bs

>>> x = bs.BeautifulSoup(xml_content)
>>> x.findAll("type")[-1].parent.find("long_name").text
u'11211'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...