【问题标题】:PHP: How to detect/parse all TAGS in rss/feed XML?PHP:如何检测/解析 rss/feed XML 中的所有标签?
【发布时间】:2011-05-23 04:50:16
【问题描述】:

我正在通过一个示例测试 RSS 提要阅读器。 它使用:

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

【问题讨论】:

  • 你的问题不太清楚。为什么不对其他标签使用相同的方法?
  • 是的,因为我不知道如何调用其他标签。例如,对于“日期”,这个getElementsByTagName('date')getElementsByTagName('lastUpdated') 不起作用。它显示:Fatal error: Call to a member function item() on a non-object。我完全不知道这个 RSS/XML 主题。
  • 我认为你最好使用simplexml 如果你的项目不太远,这可能是一个更好的选择

标签: php xml rss tags


【解决方案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);

【讨论】:

  • 它显示&lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; &lt;&gt; 我应该修改什么?
  • function parseNode() 中,$note-&gt;tagName 是什么?没有预定义的$notetagName.. ;(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多