2011-05-23 74 views
0

我從一個樣本測試rss feed閱讀器。 它使用:PHP:如何檢測/解析rss/feed XML中的所有標籤?

$xmlDoc = new DOMDocument(); 
$xmlDoc->load($url); 

$items = $xmlDoc->getElementsByTagName('item'); 
for ($i=0; $i < $items->length; $i++) { 
    $item_title = $items->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue; 
    $item_link = $items->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue; 
    $item_desc = $items->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue; 
} 

當我檢查XML,它還有另一個標籤,如:

  • 日期
  • 圖片鏈接

我怎樣才能把這些所有其他標籤?因爲我不能稱自己。
例如,對於'日期',我不能使用getElementsByTagName('date')
它示值誤差:Fatal error: Call to a member function item() on a non-object

  • 那麼,有沒有固定的標籤名稱?
  • 如果是這樣,這是什麼? (或)我如何知道/解析/分離/提取XML內的所有可用標記?
+0

你的問題不是太清楚。你爲什麼不用其他標籤使用相同的方法? – JohnP 2011-05-23 05:09:59

+0

是的,因爲我不知道如何調用其他標籤。例如,對於「日期」,這個'getElementsByTagName('date')'或'getElementsByTagName('lastUpdated')'不起作用。它顯示:致命錯誤:調用一個非對象的成員函數item()。我完全不知道這個RSS/XML主題。 – Alvin 2011-05-23 05:21:50

+1

我認爲你最好使用[simplexml](http://php.net/simplexml)如果你在項目中不是太遠,這可能是一個更好的選擇 – JohnP 2011-05-23 05:25:42

回答

1

您可以遞歸訪問每個節點,您可以選擇從一個通過檢查,讓您的數據,如果標籤名稱符合您的需求之一:

$indent = 0; 
$tab = 4; 
function indent($indent){ 
    $r = ""; 
    for($i=0;$i<$indent;$i++) 
     $r .= " "; 
    return $r; 
} 
function parseNode($node){ 
    global $indent,$tab; 
    if(!$node->hasChildNodes()) 
     return; 
    $indent += $tab; 
    // if($note->tagName == "item") do something special 
    echo indent($indent)."<".$note->nodeName.">"; 
    foreach ($node->childNodes as $c) 
     parseNode($c); 

    echo indent($indent)."</".$note->nodeName.">"; 
    $indent -= $tab; 
} 
$xmlDoc = new DOMDocument(); 
$xmlDoc->load($url); 
parseNode($xmlDoc); 
+0

它顯示'<><>< ><><><><><><><><><><><><><><><><> ><><><><><><><><><><><><><><><><> ><><><><><><><><><><><><><><><><> ><><><><><><><><><><><><><><><><> ><><><><><><><><><><><><><><><><><><><><><><><><>'我應該修改什麼?<><><><><><><><><><><><><> – Alvin 2011-05-23 05:40:18

+0

在'function parseNode()'中,'$ note-> tagName'是什麼?沒有預定義的'$ note'或'tagName' ..;( – Alvin 2011-05-23 05:49:10