1

Google ジオコード API 応答を解析したいのですが、結果の構造が常に同じとは限りません。たとえば、郵便番号を知る必要がありますが、ノードにある場合もあれば、Locality/DependentLocality/PostalCode/PostalCodeNumberノードにある場合もありLocality/PostalCode/PostalCodeNumberます。この背後にあるロジックはよくわかりませんPostalCodeNumber。正確にどこにあるとしても、ノードの値を取得したいだけです。XPathでそれを行うことはできますか? もしそうなら、どのように?

アップデート

試してみまし//PostalCodeNumberたが、空の配列を返します。コード スニペットは次のとおりです。

$xml = new \SimpleXMLElement($response);
var_dump($xml->xpath('//PostalCodeNumber'));

これ$responsehttp://maps.google.com/maps/geo?q=1055+Budapest&output=xmlのコンテンツです (文字の問題があるため、クリックする代わりに URL をコピーして貼り付けてください...)

4

2 に答える 2

2

このXPathを使用してみてください:

Locality//PostalCodeNumber

elementのすべての子孫が検索されますPostalCodeNumberLocality

于 2012-11-06T00:28:03.050 に答える
1
//PostalCode/PostalCodeNumber

トリックを行う必要があります。Google で簡単に検索すると、次のスキーマ スニペ​​ットが得られます。これは、複数の DependentLocality 要素がネストされている可能性があることを示しているため、複数の結果を確認し、最も具体的な (最も深くネストされた) 要素が必要か、または最小の要素が必要かを判断する必要があります。明確な。

更新: 名前空間の問題を防ぐために、名前空間をクエリに明示的に追加します。

$xml = new SimpleXMLElement($response);
$xpath->registerXPathNamespace('ns', 'urn:oasis:names:tc:ciq:xsdschema:xAL:2.0');
var_dump($xml->xpath('//ns:PostalCodeNumber'));

更新 2: いくつかのタイプミスを修正

更新 3:

 <?php 
$result = file_get_contents('http://maps.google.com/maps/geo?q=1055+Budapest&output=xml');
$sxe = new SimpleXMLElement($result);
$sxe->registerXPathNamespace('c', 'urn:oasis:names:tc:ciq:xsdschema:xAL:2.0');
$search = $sxe->xpath('//c:PostalCodeNumber');
foreach($search as $code) {
  echo $code;
}
?> 
于 2012-11-06T00:36:25.423 に答える