0

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

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

4

3 回答 3

1

设法通过使用DOMXPathXPath 语法来解决它。

于 2012-06-06T13:36:13.340 回答
1

这是 DOMXPath 示例:

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

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

于 2014-04-10T16:44:39.703 回答
0

->prefix您可以通过检查或来判断节点是否具有命名空间->namespaceURI

foreach ($doc->getElementsByTagName('link') as $link) {
    if (strlen($link->prefix)) {
        continue;
    }
    // $link does not have prefix
}
于 2012-06-06T13:57:25.990 回答