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

时间:2011-05-23 04:50:16

标签: php xml rss tags

我正在测试rss feed阅读器。 它使用:

$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中的所有可用标签?

1 个答案:

答案 0 :(得分: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);