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

在PHP DOM中仅选择没有名称空间/前缀的节点?,php,xml,dom,namespaces,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> 它适用于我尝试过的所有其他RSS提

我正在尝试阅读一些PHP中使用DOM的RSS提要,如下所示:

    <channel>
        <atom:link href='' rel='self' type='application/rss+xml' />
        <title>TechStuff</title>
        <link>http://www.howstuffworks.com</link>
它适用于我尝试过的所有其他RSS提要。但是这一个将
放在
之前,这意味着它将取而代之的是


那么如何只选择没有名称空间的节点呢?

通过使用and来解决问题。

您可以通过检查前缀
->prefix
->namespaceURI
来判断节点是否有名称空间:

foreach ($doc->getElementsByTagName('link') as $link) {
    if (strlen($link->prefix)) {
        continue;
    }
    // $link does not have prefix
}

下面是一个示例:

$xpath = new DOMXpath($doc);
$linkPath = $xpath->query("/rss/channel/link");
$link = $linkPath->item(0)->nodeValue;

在一个类似的XML层次结构上,它对我很有用。

如果您添加一个示例(只是一个示例性的xpath,xpath函数名应该能说明问题)
$xpath = new DOMXpath($doc);
$linkPath = $xpath->query("/rss/channel/link");
$link = $linkPath->item(0)->nodeValue;