PHP 使用 SimpleXML 遇到冒號「:」的解法

PHP 使用 SimpleXML 來解析 XML 很方便,解析 RSS 也是輕鬆愉快,不過要解析 WordPress 的 RSS 時,遇到 XML Tag 的名稱有「:」,造成解析不到,要怎麼解決呢?

PHP 使用 SimpleXML 遇到冒號「:」的解法

WordPress RSS 在內容的部分,有此標籤:,而這個標籤在 SimpleXML 解析是無法直接取用的。

下述有幾種方式可以抓到:

方法1

下述的 http://purl.org/rss/1.0/modules/content/,取自 XML 最上面的定義,如下範例:

<rss
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<?php
$rss = simplexml_load_file('http://feeds.feedburner.com/tsungblog');
foreach ($rss->channel->item as $i => $item) {
    // echo $item->children('http://purl.org/dc/elements/1.1/')->encoded;
    $ns_content = $item->children('http://purl.org/rss/1.0/modules/content/');
    echo $ns_content->encoded;
}
?>

方法2

使用 PHP SimpleXMLElemenX children 的參數

public SimpleXMLElement SimpleXMLElement::children ([ string $ns [, bool $is_prefix = false ]] )

註:ns = namespace

<?php
$rss = simplexml_load_file('http://feeds.feedburner.com/tsungblog');
foreach ($rss->channel->item as $i => $item) {
    $ns_content = $item->children('content', true);
    echo $ns_content->encoded;
}
?>

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料