使用SimpleXML处理XML文件


1SimpleXML简介

要处理XML文件,有两种传统的处理思路:SAXDOMSAX基于事件触发机制,对XML文件进行一次扫描,完成要进行的处理;DOM则将整个XML文件构造为一棵DOM树,通过对DOM树的遍历完成处理。这两种方法各有优缺点,SAX的处理思路相对抽象,DOM的处理过程相对烦琐,都不很适合新手的入门。

PHP5推出了一套新的XML处理函数,即SimpleXML。名如其实,SimpleXML本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML文件功能却非常强大,操作也非常的简单。

首先,它提供有简单的函数可以从XML文档、字符串、或DOM对象上直接构造出SimpleXMLElement对象;其次,SimpleXMLElement提供有简单的方法可以进行属性、子节点、和XPath的操作;然而,SimpleXML最简单的地方是,它提供有使用标准对象的属性和对象迭代器进行节点操作的方法,这一处理思路使得用PHPXML文档的处理得到了极大的简化。

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,子节点titlecontenttime以及若干条对于它的回复信息,每条回复包括属性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)设置回复2id属性

//设置管理数组的值
$xml->msg->reply[1]['id'] = '222';

11)新增一个描述消息作者的字段

//直接设置属性
$xml->msg->author = 'zhangsan';

12)将消息的作者保存为属性

//设置关联数组的key
$xml->msg['author'] = 'zhangsan';

13)重新保存对象到文件

//保存
$xml->asXML('MessagesNew.xml');

应该可以看出SimpleXML有多简单了吧!

你可能感兴趣的:(xml)