在XPath查询中使用contains时出错

时间:2010-11-25 16:02:37

标签: php xml xpath

我正在尝试解析以下网址: 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()

2 个答案:

答案 0 :(得分:2)

您的XPath表达式被计算为布尔数据类型(false,因为您的路径错误)

如果您要选择包含某些字符串的itemtitle个孩子的description元素,请使用:

/rss/channel/item[(title|description)[contains(.,'string')]]

答案 1 :(得分:0)

首先:$xpath->query返回DOMNodeList,其中没有方法getElementsByTagName

第二:您的查询会返回title元素或description而不是item

将其更改为//item[contains(title,'".$_GET['filter']."')]