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>
-
<descrīption>
-
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...
-
</descrīption>
-
<link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station </link>
-
</item>
-
<item>
-
<title>Personal for Elliotte Harold </title>
-
<descrīption>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 ... </descrīption>
-
<link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/ </link>
-
</item>
-
</channel>
-
</rss>
解析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-> descrīption . "</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-> descrīption . "</p>";
-
}
-
?>
-
</body>
-
</html>
-
Simplexml,真的很simple,不信可以拿去和php的DOM function做下比较:)