我正在尝试获取<address_component>
元素中的值,该值对应于Google maps REST API返回的XML中的<type>postal_code</type>
。
例如,在下面:
...
<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>
元素。其中之一是<type>postal_code</type>
.
我的问题是,我将如何区分这些相同的命名元素,并仅选择<type>postal_code</type>
归因于它的<address_component>
?
如果它们是唯一命名的,那么情况很简单:
foreach ($address_rsponse->result as $address_option) {
$val = $address_option->some_unique_name;
}
但是,当命名相同时,我对通过子元素挑选元素的方法感到困惑。
谁能阐明正确的方法。
谢谢
您可以将 XPath 与 SimpleXML(文档)一起使用。
下面将为您提供一个包含您要查找的<address_component>
元素的数组。
$address_rsponse->result->xpath(
'address_component[normalize-space(type)="postal_code"]')
如果要遍历<result>
元素,以下内容将为您提供一个包含要查找的<address_component>
元素的数组,并为每个<result>
输出第一个元素。
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);
}