| 订阅 | 在线投稿
分享
 
 
 

用php5的simplexml解析各种feed

2008-12-23 08:13:11 编辑來源:互联网 国际版 评论
 
 
  用simplexml处理atom数据

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

  从 PHP 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"<h2>". $title ."</h2>";

  用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->itemas$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->subjectas$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']);
 
 
用simplexml处理atom数据 很多博客使用atom来输出数据,但是atom使用了名称空间(namespace),所以现在请求被命名的元素和本地名称时必须指定名称空间统一资源标识符(URI),还有一点就是simplexml的xpath方法无法直接query这个xml tree。 从 PHP 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"<h2>". $title ."</h2>"; 用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->itemas$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->subjectas$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']);
󰈣󰈤
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

网络安全治理:国家安全保障的主要方向是打击犯罪,而不是处置和惩罚受害者

来源:中国青年报 新的攻击方法不断涌现,黑客几乎永远占据网络攻击的上风,我们不可能通过技术手段杜绝网络攻击。国家安全保障的主要方向是打击犯罪,而不是处置和惩罚...

 
 
 
>>返回首页<<
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 
 热帖排行
 
美女灿烂的笑容(二)
美女灿烂的笑容(一)
...雨秋
欧洲
 
 
王朝网络微信公众号
微信扫码关注本站公众号wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
©2005- 王朝网络 版权所有