|
php5新增了Simplexml extension,我们可以借助它来解析,修改XML。在IBM的知识库里找到一篇文章对此做了专门的介绍,而且比较详细,感兴趣的话可以看看最后的参考文档。 一个RSS Feed
下面是一个RSS的例子,我们准备用simplexml来解析它。
<?xml version="1.0" encoding="UTF-8"?> <rss version="0.92"> <channel> <title>Mokka mit Schlag</title> <link>http://www.elharo.com/blog</link> <language>en</language> <item> <title>Penn Station: Gone but not Forgotten</title> <description> The old Penn Station in New York was torn down before I was born. Looking at these pictures, that feels like a mistake. The current site is functional, but no more; really just some office towers and underground corridors of no particular interest or beauty. The new Madison Square... </description> <link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link> </item> <item> <title>Personal for Elliotte Harold</title> <description>Some people use very obnoxious spam filters that require you to type some random string in your subject such as E37T to get through. Needless to say neither I nor most other people bother to communicate with these paranoids. They are grossly overreacting to the spam problem. Personally I won’t ...</description> <link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link> </item> </channel> </rss> |
解析XML
首先载入一个xml
| $rss = simplexml_load_file(’http://www.ooso.net/index.php/feed/’); |
这里使用的是simplexml_load_file函数,能够马上解析指定url的xml文件,因为是simplexml,所以simple。下面就可以象读取php数组一样来使用解析后xml的内容了,比如读取RSS的标题:
$title = $rss->channel->title; <title><?php echo $title; ?></title> |
或者是循环显示rss的各个ITEM节点
| $rss->channel->item //这个是item |
foreach ($rss->channel->item as $item) { echo "<h2>" . $item->title . "</h2>"; echo "<p>" . $item->description . "</p>"; } |
一个简单但完整的RSS Reader
把上面的代码整合在一起,就是一个五脏俱全的麻雀牌RSS Reader了
<?php // 载入并解析XML $rss = simplexml_load_file(’http://partners.userland.com/nytRss/nytHomepage.xml’); $title = $rss->channel->title; ?> <html xml:lang="en" lang="en"> <head> <title><?php echo $title; ?></title> </head> <body> <h1><?php echo $title; ?></h1> <?php // 循环输出ITEM节点的说明 foreach ($rss->channel->item as $item) { echo "<h2><a href=’" . $item->link . "’>" . $item->title . "</a></h2>"; echo "<p>" . $item->description . "</p>"; } ?> </body> </html> |
Simplexml,真的很simple,不信可以拿去和php的DOM function做下比较:)
参考
http://www-128.ibm.com/developerworks/xml/library/x-simplexml.html |