2011-03-18 93 views
6

我想解析一個使用xpath的blogspot feed,但它似乎沒有與我嘗試的任何東西一起工作。我不確定是因爲命名空間還是什麼,但我希望有人能幫助我。這裏是代碼:php xpath問題

$xml = simplexml_load_file('http://feeds.feedburner.com/blogspot/MKuf'); 

$next = $xml->xpath("//link[@rel='next']"); 
print_r($next); 

這只是返回一個空數組,它不應該是。我試圖做只是鏈接或只是輸入,它仍然是空的。我可以運行的唯一一個可以運行的是*。任何幫助表示讚賞。

+0

你的xpath似乎錯了,它實際上返回了零個元素。你想完成什麼? – 2011-03-18 15:43:36

+0

該文檔有一個默認名稱空間,您必須先註冊,然後才能使用XPath查詢它。 – Gordon 2011-03-18 15:54:21

+1

可能重複的[DOM XPath查詢幫助](http://stackoverflow.com/questions/5341995/dom-xpath-query-help) – Gordon 2011-03-18 15:55:12

回答

10

就像在你的評論中已經說過的那樣,文檔有一個默認的名稱空間,你必須先註冊,然後才能用XPath查詢它。

由於鏈接複製只展示瞭如何使用DOM做到這一點,我將添加一個SimpleXML的例子

$feed = simplexml_load_file('http://feeds.feedburner.com/blogspot/MKuf'); 
$feed->registerXPathNamespace('f', 'http://www.w3.org/2005/Atom'); 
foreach ($feed->xpath('//f:link[@rel="next"]') as $link) { 
    var_dump($link); 
} 

手冊頁:http://de.php.net/manual/de/simplexmlelement.registerxpathnamespace.php

Live Demo

3

正如戈登說,你需要註冊XML文檔的默認命名空間,如下所示:

$xml->registerXPathNamespace('default', 'http://www.w3.org/2005/Atom'); 

然後使用default前綴是指正常的元素:

$next = $xml->xpath("//default:link[@rel='next']"); 

新版本可以讓你定義默認('')的命名空間。有關更多信息,請參閱http://www.qc4blog.com/?p=281

+0

謝謝我實際上也發現了這一點。我之前曾嘗試過這樣做,這就是爲什麼它失敗了。 – ngreenwood6 2011-03-18 16:20:51

+0

這些答案之一是否解決了您的問題?點擊旁邊的複選標記告訴我們,並將其中一個標記爲答案。 – 2011-04-11 20:15:53