PHP:如何检测/解析rss/feed XML中的所有标签?

PHP:如何检测/解析rss/feed XML中的所有标签?

问题描述:

我从一个样本测试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

您可以递归访问每个节点,您可以选择从一个通过检查,让您的数据,如果标签名称符合您的需求之一:

$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