在实际项目开发中,我们通常使用PHP DOM模型来完成数据的增删改功能,而使用SimpleXML模型来实现数据的查询操作。
以下实例用到的data.xml:
<?xml version="1.0" encoding="UTF-8"?> <library> <book id="b001"> <title>西游记</title> <price>168.00</price> <author>吴承恩</author> <publish>中国文学出版社</publish> </book> <book> <title>三国演义</title> <price>198.00</price> <author>罗贯中</author> <publish>三国演义研究学会</publish> </book> <book> <title>水浒传</title> <price>99.80</price> <author>施耐庵</author> <publish>清华出版社</publish> </book> </library>
1. 生成SimpleXML模型
在PHP DOM模型,任何操作都必须经历二个步骤(①开辟内存空间,形成“面”②载入XML文档到内存,形成DOM树)
在SimpleXML只需要通过一个函数就可以实现以上功能:
simpleXMLElement simplexml_load_file ( string $filename)
主要功能:载入XML文档到内存,生成SimpleXML对象
// 设置响应头信息 header('Content-type:text/html; charset=utf-8'); // 1、载入xml文档到内存,生成simplexml对象 $xml = simplexml_load_file('data.xml'); var_dump($xml);
运行结果:
说明:simplexml_load_file方法会自动生成一个simplexml对象,这个对象只有一个book属性,该属性又是一个数组,每个数组元素又是一个对象,每个对象都拥有4个属性(title/price/author/publish)。
2. 使用SimpleXML查询指定元素
header('Content-type:text/html; charset=utf-8'); // 1、载入xml文档到内存,生成simplexml对象 $xml = simplexml_load_file('data.xml'); // var_dump($xml); // 2、获取三国演义这个节点信息 echo $xml->book[1]->title; // 输出结果:三国演义
3. 遍历输出节点信息
// 设置响应头信息 header('Content-type:text/html; charset=utf-8'); // 1、生成simplexml对象 $xml = simplexml_load_file('data.xml'); // 2、对元素进行遍历输出 foreach($xml->book as $row) { //输出图书的相关信息 echo $row->title.'<br />'; echo $row->price.'<br />'; echo $row->author.'<br />'; echo $row->publish.'<hr />'; }
在simplexml中也可以通过children()方法来实现对元素的遍历输出。
public SimpleXMLElement SimpleXMLElement::children()
主要功能:获取元素的子节点
// 设置响应头信息 header('Content-type:text/html; charset=utf-8'); // 1、生成simplexml对象 $xml = simplexml_load_file('data.xml'); // 2、对元素进行遍历输出 foreach($xml->children() as $row) { //输出图书的相关信息echo $row->title.'<br />'; echo $row->price.'<br />'; echo $row->author.'<br />'; echo $row->publish.'<hr />'; }
两者的运行效果一致,如下图所示:
4. 通过SimpleXML获取元素的属性
在SimpleXML可以通过attributes()函数获取相关属性。
// 设置响应头信息 header('Content-type:text/html; charset=utf-8'); // 1、生成simplexml对象 $xml = simplexml_load_file('data.xml'); // 2、对元素进行遍历输出 foreach($xml->children() as $row) { //输出图书的相关信息 echo $row->attributes()->id.'<br />';// 获取属性 } /*输出结果: b001*/
5. 使用SimpleXML完成添加功能
虽然SimpleXML模型主要作用在于XML数据的查询,但是其也是可以实现添加元素的,只是其创建的顺序必须是从上往下创建。
public SimpleXMLElement SimpleXMLElement::addChild ( string $name [, string $value] )
主要功能:创建新节点
参数 | 说明 |
$name | 要创建节点的名称 |
$value | 要创建节点的值 |
public void SimpleXMLElement::addAttribute ( string $name [, string $value [, string $namespace ]] )
主要功能:创建属性
参数 | 说明 |
$name | 要创建节点的名称 |
$value | 要创建节点的值 |
public mixed SimpleXMLElement::asXML ([ string $filename ] )
主要功能:保存内存中的数据到XML文档中
参数 | 说明 |
$filename | 要保存文件的名称 |
// 设置响应头信息 header('Content-type:text/html; charset=utf-8'); // 1、生成SimpleXML对象 $xml = simplexml_load_file('data.xml'); // 2、创建新节点(必须从上往下一次创建) $book = $xml->addChild('book'); // 创建属性 $book->addAttribute('id','b003'); // 创建子节点 $book->addChild('title','红楼梦'); $book->addChild('price','198.00'); $book->addChild('author','曹雪芹'); $book->addChild('publish','红楼梦研究学会'); // 3、保存内存中的数据到XML文档中 $xml->asXML('data.xml'); echo '添加成功';
运行结果: