我正在尝试解析以下网址: http://rss.cbc.ca/lineup/technology.xml
我的代码是:
$doc = new DOMDocument();
$doc->load("http://rss.cbc.ca/lineup/technology.xml");
echo '<ul class="rss">';
$i = 0;
if( isset($_GET['filter']) ){
$xpath = new DOMXPath($doc);
$doc = $xpath->query("item/title[contains(.,'".$_GET['filter']."')] or item/description[contains(.,'".$_GET['filter']."')]");
echo "<p>Filtering news items on '".$_GET['filter']."'</p>";
}
foreach ($doc->getElementsByTagName('item') as $node) {
if($i % 2 == 0)
$class = "even";
else
$class = "odd";
echo '<li class="'.$class.'">';
echo "<h1>".$node->getElementsByTagName('title')->item(0)->nodeValue."</h1>";
echo "<p>".$node->getElementsByTagName('description')->item(0)->nodeValue."</p>";
echo '<a href="'.$node->getElementsByTagName('link')->item(0)->nodeValue.'">Link to story</a>';
echo "</li>";
$i = $i + 1;
}
echo "<ul>";
我遇到的问题是,如果我指定一个过滤器(通过URL var),当我在页面后面执行foreach时,我会收到错误:
致命错误:调用未定义的方法 的DOMNodeList ::的getElementsByTagName()
答案 0 :(得分:2)
您的XPath表达式被计算为布尔数据类型(false,因为您的路径错误)
如果您要选择包含某些字符串的item
或title
个孩子的description
元素,请使用:
/rss/channel/item[(title|description)[contains(.,'string')]]
答案 1 :(得分:0)
首先:$xpath->query
返回DOMNodeList,其中没有方法getElementsByTagName
。
第二:您的查询会返回title
元素或description
而不是item
。
将其更改为//item[contains(title,'".$_GET['filter']."')]