我正在从一个示例中测试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中的所有可用标记
您可以递归地访问每个节点,并可以通过检查标记名称是否与您想要的名称匹配来选择从哪个节点获取数据:
$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);