文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用php5的simplexml解析各种feed

用php5的simplexml解析各种feed

时间:2008-05-17  来源:剑心通明

用simplexml处理atom数据
很多博客使用atom来输出数据,但是
atom
使用了名称空间(namespace),所以现在请求被命名的元素和本地名称时必须指定名称空间统一资源标识符(URI),还有一点就是simplexml的xpath方法无法直接query这个
[url=javascript:;]xml[/url]
tree。

[url=javascript:;]PHP[/url]
5.1 版开始,SimpleXML 可以直接对带名称空间的文档使用 XPath 查询。和通常一样,XPath 位置路径必须使用名称空间前缀,即使搜索的文档使用默认名称空间也仍然如此。registerXPathNamespace() 函数把前缀和后续查询中使用的名称空间 URL 联系在一起。
下面是使用xpath查询atom文档title元素的例子:
PLAIN TEXT
CODE:
$atom =  simplexml_load_file('http://www.ooso.net/index.php/feed/atom');
$atom->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
$titles = $atom->xpath('//atom:title');
foreach ($titles as $title)
  echo "" . $title . "";
用simplexml处理
rss
数据
wordpress可以输出rss2的数据源,这里面也有一些不同的namespace,比如dc。一个使用simplexml解析rss2的例子:
PLAIN TEXT
PHP:
$ns = array (
        'content' => 'http://purl.org/rss/1.0/modules/content/',
        'wfw' => 'http://wellformedweb.org/CommentAPI/',
        'dc' => 'http://purl.org/dc/elements/1.1/'
);

$articles = array();

// step 1: 获得feed
$blogUrl = 'http://www.ooso.net/index.php/feed/rss2';
$xml = simplexml_load_url($blogUrl);

// step 2: 获得channel metadata
$channel = array();
$channel['title']       = $xml->channel->title;
$channel['link']        = $xml->channel->link;
$channel['description'] = $xml->channel->description;
$channel['pubDate']     = $xml->pubDate;
$channel['timestamp']   = strtotime($xml->pubDate);
$channel['generator']   = $xml->generator;
$channel['language']    = $xml->language;

// step 3: 获得articles
foreach ($xml->channel->item as $item) {
        $article = array();
        $article['channel'] = $blog;
        $article['title'] = $item->title;
        $article['link'] = $item->link;
        $article['comments'] = $item->comments;
        $article['pubDate'] = $item->pubDate;
        $article['timestamp'] = strtotime($item->pubDate);
        $article['description'] = (string) trim($item->description);
        $article['isPermaLink'] = $item->guid['isPermaLink'];

        // get data held in namespaces
        $content = $item->children($ns['content']);
        $dc      = $item->children($ns['dc']);
        $wfw     = $item->children($ns['wfw']);

        $article['creator'] = (string) $dc->creator;
        foreach ($dc->subject as $subject)
                $article['subject'][] = (string)$subject;

        $article['content'] = (string)trim($content->encoded);
        $article['commentRss'] = $wfw->commentRss;

        // add this article to the list
        $articles[$article['timestamp']] = $article;
}
这个例子中,使用children方法来获得名称空间中的数据:
PLAIN TEXT
PHP:
$dc      = $item->children($ns['dc']);


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载