-1

重複の可能性:
SimpleXML を使用して名前空間で XML を解析する

私はxpathが初めてで、これを解析できません。出力は生成されません。

これには、Google Map API V3 から返された XML が含まれます。PostalCode/PostalCodeNumber から郵便番号を解析して返すようにしたいと考えています。このテストを設定したのは、Google の API が他のタグを邪魔している場合でも、PostalCode/PostalCodeNumber に確実にアクセスできるようにする必要があるためです。したがって、静的ツリー構造パスに依存せずに PostalCode/PostalCodeNumber などに直接アクセスできるようにしたいので、xpath を機能させることが重要です。あなたの返信に親切で親切にしてください、ありがとう!

<?php

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://earth.google.com/kml/2.0"><Response>
  <name>40.74445606,-73.97495072</name>
  <Status>
    <code>200</code>
    <request>geocode</request>
  </Status>
  <Placemark id="p1">
    <address>317 E 34th St, New York, NY 10016, USA</address>
    <AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>US</CountryNameCode><CountryName>USA</CountryName><AdministrativeArea><AdministrativeAreaName>NY</AdministrativeAreaName><Locality><LocalityName>New York</LocalityName><Thoroughfare><ThoroughfareName>317 E 34th St</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>10016</PostalCodeNumber></PostalCode></Locality></AdministrativeArea></Country></AddressDetails>
    <ExtendedData>
      <LatLonBox north="40.7458050" south="40.7431070" east="-73.9736017" west="-73.9762997" />
    </ExtendedData>
    <Point><coordinates>-73.9749507,40.7444560,0</coordinates></Point>
  </Placemark>
</Response></kml>
XML;

$xml = new SimpleXMLElement($xml);

$result = $xml->xpath('PostalCode/PostalCodeNumber');

while(list( , $node) = each($result)) {
    echo 'PostalCode/PostalCodeNumber: ',$node,"\n";
}
?>
4

2 に答える 2

2

郵便番号は名前空間にあります。要素と一致するように、XPath 式で名前空間を指定する必要があります。

$xml = new SimpleXMLElement($xml);
$xml->registerXPathNamespace('urn', 'urn:oasis:names:tc:ciq:xsdschema:xAL:2.0');
$result = $xml->xpath('//urn:PostalCodeNumber');
于 2012-10-16T23:11:33.370 に答える
0

descendant::PostalCode またはを使用し//PostalCodeます。

上記のリンクでは、動作するように xml から名前空間の定義を削除したことに注意してください。明確な説明については、http: //www.edankert.com/defaultnamespaces.html#Conclusion をご覧ください。

わかりやすい XPath の紹介については、W3Schools を参照してください

于 2012-10-16T23:05:22.607 に答える