2010-11-25 105 views
1

我試圖解析以下網址: http://rss.cbc.ca/lineup/technology.xml錯誤包含XPath查詢

我的代碼是:

$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>"; 

是我遇到的問題是,如果我指定一個(通過VAR URL)過濾器,當我後來做的foreach下來的頁面,我得到一個錯誤:

Fatal error: Call to undefined method DOMNodeList::getElementsByTagName()

回答

2

你的XPath表達式求值的布爾數據類型(假的,因爲你拍

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

感謝您的幫助! – TekiusFanatikus 2010-11-25 18:47:04

0

首先:$xpath->query返回DOMNodeList其中沒有一個方法getElementsByTagName如果要選擇具有titledescription兒童方含一些字符串,使用這些item元素h是錯誤的)

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

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