1SimpleXML简介要处理XML文件,有两种传统的处理思路:SAX和DOM。SAX基于事件触发机制,对XML文件进行一次扫描,完成要进行的处理;DOM则将整个XML文件构造为一棵DOM树,通过对DOM树的遍历完成处理。这两种方法各有优缺点,SAX的处理思路相对抽象,DOM的处理过程相对烦琐,都不很适合新手的入门。 PHP5推出了一套新的XML处理函数,即SimpleXML。名如其实,SimpleXML本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML文件功能却非常强大,操作也非常的简单。 首先,它提供有简单的函数可以从XML文档、字符串、或DOM对象上直接构造出SimpleXMLElement对象;其次,SimpleXMLElement提供有简单的方法可以进行属性、子节点、和XPath的操作;然而,SimpleXML最简单的地方是,它提供有使用标准对象的属性和对象迭代器进行节点操作的方法,这一处理思路使得用PHP对XML文档的处理得到了极大的简化。 2SimpleXML入门示例下面我们通过一些小的代码片段,稍微了解一下SimpleXML的强大和简洁。为举例方便,我们使用一个Messages.xml文件,里面包含这样一段XML代码: <?xml version='1.0' standalone='yes'?> <Messages> <msg id='1'> <title>This is Title</title> <content>Here is Content</content> <time>2008-03-20 21:50:23</time> <reply id='11'>reply 1</reply> <reply id='12'>reply 2</reply> </msg> </Messages> 这是一篇保存有留言信息的XML文档,每条信息包括属性id,子节点title、content、time以及若干条对于它的回复信息,每条回复包括属性id及回复的内容。 用SimpleXML处理并输出此XML文档内容的过程以及方法如下。 (1)构造SimpleXMLElement对象 $xml= simplexml_load_file('Messages.xml'); 如果这段xml已经被读入到一个字符串$messages中,则可以使用如下语句: $xml = simplexml_load_string('Messages.xml'); (2)输出留言1的标题 //可以使用属性的方式访问子节点,通过节点的标签名可直接得到节点的内容 echo $xml->msg->title; (3)输出留言1的第一条回复信息 //同级别的多个同名节点自动成为数组,可以通过索引下标访问其内容 echo $xml->msg->reply[0]; (4)输出留言的i //节点的属性与值被封装成为关联数组的键与值 echo $xml->msg['id']; (5)输出第二条回复的id //成为二维数组,第一维表示节点,第二维表示属性 echo $xml->msg->reply[1][ 'id']; (6)依次输出所有回复的id //使用foreach对同名节点进行遍历 foreach ($xml->msg->reply as $reply){ echo $reply['id']; } (7)使用XPath检索所有的回复信息 //xpath方法直接检索定位(//表示任意深度) foreach ($xml->xpath('//reply') as $reply){ echo $reply.'<br>'; } (8)遍历留言1所有的子节点 //children方法得到所有子节点 foreach ($xml->msg->children() as $field){ echo $field.'<br>'; } (9)重新设置留言1的发布时间 //直接设置属性 $xml->msg->time = '2008-03-21 00:53:12'; (10)设置回复2的id属性 //设置管理数组的值 $xml->msg->reply[1]['id'] = '222'; (11)新增一个描述消息作者的字段 //直接设置属性 $xml->msg->author = 'zhangsan'; (12)将消息的作者保存为属性 //设置关联数组的key $xml->msg['author'] = 'zhangsan'; (13)重新保存对象到文件 //保存 $xml->asXML('MessagesNew.xml'); 应该可以看出SimpleXML有多简单了吧! |