Categories
php

PHP5的Simplexml

php5新增了Simplexml extension,我们可以借助它来解析,修改XML。在IBM的知识库里找到一篇文章对此做了专门的介绍,而且比较详细,感兴趣的话可以看看最后的参考文档。

一个RSS Feed

下面是一个RSS的例子,我们准备用simplexml来解析它。
[xml]


Mokka mit Schlag http://www.elharo.com/blog en

Penn Station: Gone but not Forgotten

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…
http://www.elharo.com/blog/new-york/2006/07/31/penn-station


Personal for Elliotte Harold
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 …

http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/

[/xml]

解析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;
<?php echo $title; ?>

或者是循环显示rss的各个ITEM节点


$rss->channel->item //这个是item

foreach ($rss->channel->item as $item) {
  echo "

" . $item->title . "

"; echo "

" . $item->description . "

"; }

一个简单但完整的RSS Reader

把上面的代码整合在一起,就是一个五脏俱全的麻雀牌RSS Reader了。

<?php 
// 载入并解析XML
$rss =  simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
$title =  $rss->channel->title;
?>


  <?php echo $title; ?>



<?php echo $title; ?>

<?php // 循环输出ITEM节点的说明 foreach ($rss->channel->item as $item) { echo "

" . $item->title . "

"; echo "

" . $item->description . "

"; } ?>

Simplexml,真的很simple,不信可以拿去和php的DOM function做下比较:)

参考

http://www-128.ibm.com/developerworks/xml/library/x-simplexml.html

6 replies on “PHP5的Simplexml”

严禁楼上的打广告.学术重地,不容撒野。楼主只研究PHP吗?

Leave a Reply

Your email address will not be published.