php xpath问题

时间:2011-03-18 15:38:57

标签: php xpath simplexml

我正在尝试使用xpath解析blogspot提要,但它似乎并没有使用我尝试的任何东西。我不确定是不是因为命名空间或什么,但我希望有人可以帮助我。这是代码:

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

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

这只是返回一个空数组,它不应该是。我尝试过只做链接或只是输入,它仍然是空的。唯一可以运行它的是*。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

正如Gordon所说,您需要注册XML文档的默认命名空间,如下所示:

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

然后使用default前缀来引用普通元素:

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

较新的版本可能允许您定义默认('')命名空间。有关详细信息,请参阅http://www.qc4blog.com/?p=281