使用SimpleXML处理XML文件

前端之家收集整理的这篇文章主要介绍了使用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代码

@H_403_150@<?xml version='1.0' standalone='yes'@H_403_150@?>
<Messages@H_403_150@>
<
msg id='1'@H_403_150@>
<
title>This is Title</title@H_403_150@>
<
content>Here is Content</content@H_403_150@>
<
time>2008-03-20 21:50:23</time@H_403_150@>
<
reply id='11'>reply 1</reply@H_403_150@>
<
reply id='12'>reply 2</reply@H_403_150@>
</
msg@H_403_150@>
</
Messages>@H_829_301@

这是一篇保存有留言信息的XML文档,每条信息包括属性id,子节点titlecontenttime以及若干条对于它的回复信息,每条回复包括属性id回复内容

SimpleXML处理并输出XML文档内容的过程以及方法如下。

(1)构造SimpleXMLElement对象

@H_403_150@$xml= simplexml_load_file('Messages.xml');@H_829_301@

如果这段xml已经被读入到一个字符串$messages中,则可以使用如下语句:

@H_403_150@$xml = simplexml_load_string('Messages.xml');@H_829_301@

2输出留言1标题

//可以使用属性的方式访问子节点,通过节点的标签名可直接得到节点的内容
@H_403_150@echo $xml->msg->title;@H_829_301@

3输出留言1的第一条回复信息

//同级别的多个同名节点自动成为数组,可以通过索引下标访问其内容
@H_403_150@echo $xml->msg->reply[0];@H_829_301@

4输出留言的i

//节点的属性与值被封装成为关联数组的键与值
@H_403_150@echo $xml->msg['id'];@H_829_301@

5输出第二条回复id

//成为二维数组,第一维表示节点,第二维表示属性
@H_403_150@echo $xml->msg->reply[1][ 'id'];@H_829_301@

6)依次输出所有回复id

//使用foreach对同名节点进行遍历
@H_403_150@foreach ($xml->msg->reply as $reply@H_403_150@){
echo
$reply['id'@H_403_150@];
}
@H_829_301@

7)使用XPath检索所有的回复信息

//xpath方法直接检索定位(//表示任意深度)
@H_403_150@foreach ($xml->xpath('//reply') as $reply@H_403_150@){
echo
$reply.'<br>'@H_403_150@;
}
@H_829_301@

8)遍历留言1所有的子节点

//children方法得到所有子节点
@H_403_150@foreach ($xml->msg->children() as $field@H_403_150@){
echo
$field.'<br>'@H_403_150@;
}
@H_829_301@

9)重新设置留言1的发布时间

//直接设置属性
@H_403_150@$xml->msg->time = '2008-03-21 00:53:12';@H_829_301@

10)设置回复2id属性

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

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

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

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

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

13)重新保存对象到文件

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

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

原文链接:https://www.f2er.com/xml/300032.html

猜你在找的XML相关文章