只在PHP DOM中选择没有名称空间/前缀的节点?

时间:2012-06-04 23:58:32

标签: php xml dom namespaces

我正在尝试用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>

那么我该如何选择没有命名空间的节点呢?

3 个答案:

答案 0 :(得分:1)

使用DOMXPathXPath 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
}