【万能的数据传输格式XML入门教程】七、SimpleXML模型(查询操作)

在实际项目开发中,我们通常使用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 '添加成功';

运行结果:

原文地址:https://www.cnblogs.com/chenjiacheng/p/6522565.html