我正在尝试用PHP读取一些带有DOM的RSS源:
<channel>
<atom:link href='' rel='self' type='application/rss+xml' />
<title>TechStuff</title>
<link>http://www.howstuffworks.com</link>
要获取链接(<link></link>
),我使用以下代码:
$doc->getElementsByTagName('link')->item(0);
它适用于我尝试过的所有其他RSS源。但是这个<atom:link>
已放在<link>
之前,这意味着它会抓取<atom:link>
。
那么我该如何选择没有命名空间的节点呢?
答案 0 :(得分:1)
使用DOMXPath和XPath syntax来管理解决问题。
答案 1 :(得分:1)
这是DOMXPath示例:
$xpath = new DOMXpath($doc);
$linkPath = $xpath->query("/rss/channel/link");
$link = $linkPath->item(0)->nodeValue;
在类似的XML层次结构上,它对我有用。
答案 2 :(得分:0)
您可以通过选中->prefix
或->namespaceURI
来确定节点是否具有命名空间:
foreach ($doc->getElementsByTagName('link') as $link) {
if (strlen($link->prefix)) {
continue;
}
// $link does not have prefix
}