2012-04-30 75 views
0

不加載我加載一個XML文件,如下所示:PHP的XML使用XPath

$places=simplexml_load_file("http://www.43places.com/service/search_places?api_key=1234&q=america"); 
$allPlaces=$places->xpath('//place'); 
foreach($allPlaces as $title) 
{ 
    echo "a"; 
} 

簡單地進行測試,該文件是正確加載,可以看到XML文件here

任何想法,爲什麼它不循環?

回答

3

我不知道爲什麼XPath無法正常工作,但基於我在那裏看到的XML結構,您確實不需要XPath。 SimpleXMLElements可以稍微看跌,但它是非常容易使用這種替代循環結構:

foreach($places->place as $place) 
{ 
    echo "a"; 
} 

而且你不會需要一個XPath查詢所有的開銷;你想要的結構已經在那裏。

+0

hmmmmm,很好,它的工作:),謝謝 – Noor

2

它沒有循環,因爲它不返回任何節點。那爲什麼呢?

技術上,<place>元素是它自己的命名空間內:http://www.43places.com/xml/2005/rc#,所以place僅僅是所謂的本地名稱的元素的,而不是它的全名。 XPath不接受全名,但您可以與您選擇的名稱(前綴)註冊的XPath操作的命名空間,然後在XPath查詢使用它:

$places->registerXPathNamespace("a", "http://www.43places.com/xml/2005/rc#"); 
$allPlaces = $places->xpath('//a:place'); 

此查詢現在選擇20種左右place元素您正在尋找。

另請參閱:SimpleXML: Working with XML containing namespaces

+0

感謝您的幫助:) – Noor