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 に答える