PHP5的Simplexml
php5新增了Simplexml extension,我们可以借助它来解析,修改XML。在IBM的知识库里找到一篇文章对此做了专门的介绍,而且比较详细,感兴趣的话可以看看最后的参考文档。
一个RSS Feed
下面是一个RSS的例子,我们准备用simplexml来解析它。
XML:
-
<?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
PHP:
-
$rss = simplexml_load_file('http://www.ooso.net/index.php/feed/');
这里使用的是simplexml_load_file函数,能够马上解析指定url的xml文件,因为是simplexml,所以simple。下面就可以象读取php数组一样来使用解析后xml的内容了,比如读取RSS的标题:
PHP:
-
$title = $rss->channel->title;
-
<title><?php echo $title; ?></title>
或者是循环显示rss的各个ITEM节点
PHP:
-
$rss->channel->item //这个是item
PHP:
-
foreach ($rss->channel->item as $item) {
-
echo "<h2>" . $item->title . "</h2>";
-
echo "<p>" . $item->description . "</p>";
-
}
一个简单但完整的RSS Reader
把上面的代码整合在一起,就是一个五脏俱全的麻雀牌RSS Reader了。
PHP:
-
<?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
作者: Volcano 发表于October 12, 2006 at 7:37 am
Leonardo 于 2006-10-12 @ 13:38:07 留言 :
看起来确实不错,简单易用。
Binlle 于 2006-10-12 @ 17:34:25 留言 :
严禁楼上的打广告.学术重地,不容撒野。楼主只研究PHP吗?
volcano 于 2006-10-12 @ 18:05:40 留言 :
工作原因,比较偏重php这方面,其它方面正在逐渐涉猎
MP3讯雷 于 2007-05-22 @ 17:09:31 留言 :
首先不能设置HEADER头
其次不能指定读一小段,比如我只想读第一个item但它还是把文件都抓回来了
volcano 于 2007-05-22 @ 18:32:26 留言 :
在这方面,simplexml不会做的那么细致的
你可以考虑先用其它程序将xml下回来再做进一步解析,比如pear::http_request
winnie 于 2008-11-04 @ 00:01:49 留言 :
看到大大的这篇文章茅舍顿开,另外想请教一下,如果想读取多个rss源应该怎么处理。