我正在测试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
答案 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);