zoukankan      html  css  js  c++  java
  • 【万能的数据传输格式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 '添加成功';

    运行结果:

  • 相关阅读:
    适合于小团队产品迭代的APP测试流程
    【转】软件测试上线标准
    安全性测试之修改密码
    LoadRunner 实现监控Tomcat
    【转】人生应该接受的教育
    晓光聊《小厂如何做测试》
    由测试需要多少编程知识想到的
    12款很棒的浏览器兼容性测试工具推荐
    最近感悟测试人员需要的一种能力
    APP测试功能点总结
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522565.html
Copyright © 2011-2022 走看看