2012-04-27 1 views
0

要素内の値を、<type>postal_code</type>に対応する値をGoogleマップREST APIから返されたXMLから取得しようとしています。以下の例では唯一でない要素名を持つGoogle Maps REST APIから受信したsimplexml_load_fileオブジェクト

、:

... 

    <result>  
    <type> 
     route 
    </type>  
    <formatted_address> 
     Rose Ln, Liverpool, Merseyside L18 5ED, UK 
    </formatted_address>  
    <address_component>  
     <long_name> 
     Rose Ln 
     </long_name>  
     <short_name> 
     Rose Ln 
     </short_name>  
     <type> 
     route 
     </type>  
    </address_component>  
    <address_component>  
     <long_name> 
     Liverpool 
     </long_name>  
     <short_name> 
     Liverpool 
     </short_name>  
     <type> 
     locality 
     </type>  
     <type> 
     political 
     </type>  
    </address_component>  
    <address_component>  
    ...  
    </address_component>  
    <address_component>  
    ... 
    </address_component>  
    <address_component>  
     <long_name> 
     L18 5ED 
     </long_name>  
     <short_name> 
     L18 5ED 
     </short_name>  
     <type> 
     postal_code 
     </type>  
    </address_component>  
    <address_component>  
    ...  
    </address_component>  
    ...  
    </result> 

    ... more result elements 

我々は<result>要素のいずれかを参照してください。内部には複数の<address_component>要素がネストされています。そのうちの1つは<type>postal_code</type>です。

私はこれらの同じ名前の要素を区別するにはどうすれば<address_component><type>postal_code</type>としますか?

彼らは一意には、単純な場合であると命名された場合は、次の

foreach ($address_rsponse->result as $address_option) { 
    $val = $address_option->some_unique_name;  
} 

同じ名前しかし、私はそれの子要素で要素を選び出すための方法としては困惑しています。

誰でも正しい方法で光を当てることができますか?

おかげ

答えて

1

あなたはSimpleXMLを持つXPathdocs)を使用することができます。

以下は、あなたが探している要素の<address_component>を含む配列です。

$address_rsponse->result->xpath(
    'address_component[normalize-space(type)="postal_code"]') 

あなたは<result>要素をループする場合は、次はあなたの各<result>の最初の<address_component>あなたが探している要素(複数可)と出力を含む配列を与えるだろう。

foreach ($address_rsponse->result as $result) { 
    $postal_codes = $result->xpath('address_component[normalize-space(type)="postal_code"]'); 
    // Do whatever with the postal code(s) 
    echo trim($postal_codes[0]->long_name); 
} 
+0

素晴らしいもの!私はsingle - > result要素の文脈でそれを使用しました。ありがとう –

関連する問題