2017-08-20 32 views
1

みんな! GoogleのGeocode API(XML)を使用するアプリケーションを作成しようとしています。Pythonで別のタグと同じ名前のXMLタグ内のデータを抽出するにはどうすればいいですか?

<address_component> 
    <long_name>Middlesex County</long_name> 
    <short_name>Middlesex County</short_name> 
    <type>administrative_area_level_2</type> 
    <type>political</type> 
    </address_component> 

しかし、XMLデータ内の他のタグは、同じを使用します。私は郡を抽出するためにXMLデータを介して動作しようとしています

<GeocodeResponse> 
<status>OK</status> 
<result> 
    <type>establishment</type> 
    <type>point_of_interest</type> 
    <type>university</type> 
    <formatted_address>77 Massachusetts Ave, Cambridge, MA 02139, USA</formatted_address> 
    <address_component> 
    <long_name>77</long_name> 
    <short_name>77</short_name> 
    <type>street_number</type> 
    </address_component> 
    <address_component> 
    <long_name>Massachusetts Avenue</long_name> 
    <short_name>Massachusetts Ave</short_name> 
    <type>route</type> 
    </address_component> 
    <address_component> 
    <long_name>Area 2/MIT</long_name> 
    <short_name>Area 2/MIT</short_name> 
    <type>neighborhood</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>Cambridge</long_name> 
    <short_name>Cambridge</short_name> 
    <type>locality</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>Middlesex County</long_name> 
    <short_name>Middlesex County</short_name> 
    <type>administrative_area_level_2</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>Massachusetts</long_name> 
    <short_name>MA</short_name> 
    <type>administrative_area_level_1</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>United States</long_name> 
    <short_name>US</short_name> 
    <type>country</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>02139</long_name> 
    <short_name>02139</short_name> 
    <type>postal_code</type> 
    </address_component> 
    <geometry> 
    <location> 
    <lat>42.3600910</lat> 
    <lng>-71.0941600</lng> 
    </location> 
    <location_type>ROOFTOP</location_type> 
    <viewport> 
    <southwest> 
    <lat>42.3587420</lat> 
    <lng>-71.0955090</lng> 
    </southwest> 
    <northeast> 
    <lat>42.3614400</lat> 
    <lng>-71.0928110</lng> 
    </northeast> 
    </viewport> 
    </geometry> 
    <place_id>ChIJh2oa9apw44kRPCAIs6WO4NA</place_id> 
</result> 
</GeocodeResponse> 

:これは私が働いているXMLデータであり、 「address_component」および「long_name」の名前。これらのタグに関連付けられた属性がないため、必要な特定のデータを見つけることができません。誰もがPythonを使用してXMLデータを調べ、同じ名前のタグがあるにもかかわらず必要な正確なデータを見つける方法を教えてください。

答えて

0

あなたの意図は、サブ要素type=administrative_area_level_2address_componentを取得している場合は、XMLを反復処理し、目的の要素を選択することができます。

import xml.etree.ElementTree as ET 
root = ET.fromstring("your xml string") 

def find_by_tag(tag, add_type= "administrative_area_level_2"): 
    for address in root.iter("address_component"): 
     if address.find("type").text == add_type: 
      return address.find(tag).text 
    return None 

あなたが機能find_by_tagを使用してlong_nameを取得することができます:

find_by_tag("long_name") 
## 'Middlesex County' 

または他のタグ、たとえば:

find_by_tag("short_name") 
## 'Middlesex County' 
find_by_tag("short_name", "postal_code") 
## '02139' 
+0

その情報をありがとう!私は取得しようとしてきたXMLコードの塊を見つけました。しかし、どのように私はそれを使用するのですか?私は "long_name"タグを取得するために、多くの異なるfind関数を試しましたが、動作しません。私は次のことを混乱させるように思えるので、このデータをどのように続けるべきか説明してください。これまでに返事してくれた黄氏に感謝します。 –

+0

@RaamizAbbasi私は自分の答えを編集しました。あなたのために働くことを願っています。 – Huang

関連する問題