2012-10-16 55 views
-1

可能重複:
Parse XML with Namespace using SimpleXML如何使用xpath解析此XML以直接到達元素?

我是新來的XPath,而無法得到這個解析。它不產生輸出。

這包含從Google Map API V3返回的XML。我想讓它解析並返回PostalCode/PostalCodeNumber中的郵政編碼。我設置了這個測試,因爲我需要能夠確保我可以訪問PostalCode/PostalCodeNumber,即使Google的API放置了其他標籤,有時候也是如此。所以對我來說重要的是讓xpath工作,因爲我希望能夠直接訪問像PostalCode/PostalCodeNumber這樣的東西而不依賴於靜態樹結構路徑。請對您的回覆提供善意和有益的幫助,謝謝!

<?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"; 
} 
?> 
+1

我首先想到的是懷疑你>是殺害您的字符串...你確認你有一個有效的XML呢? –

+0

是的,我做了一個var_dump($ xml),它看起來很好。你可以插入一個var_dump($ xml);在那裏看看。 – Edward

+0

我真的可以在這裏使用正確的語法幫助,其他發佈不解決我遇到問題的方法。謝謝! – Edward

回答

2

郵政編碼位於名稱空間中。您必須指定XPath表達式的命名空間來匹配元素:

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

完美解析!學習的最佳方式是一個有效的例子,所以我認爲你的幫助! – Edward

+0

@愛德華:如果你想通過例子學習,我建議你看一下手冊:http://www.php.net/manual/en/simplexmlelement.registerxpathnamespace.php – hakre