zoukankan      html  css  js  c++  java
  • php对xml文件进行CURD操作

      XML是一种数据存储、交换、表达的标准:

        - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系);
        - 交换:可以通过schema实现异构数据集成;
        - 表达:本身就可以作为阅读文档,当然还可以使用XSLT之类的进行解析和再显示。

        缺点是schema验证复杂,相比后来的json等格式,相对冗余。

     下面的是利用php对xml文件进行CURD操作:

        xml文件的格式为:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <config>
     3     <dbmsg type="mysql">
     4         <host>127.0.0.1</host>
     5         <port>3306</port>
     6         <user>root</user>
     7         <password>root123</password>
     8         <db>ksuditest</db>
     9     </dbmsg>
    10     <env>
    11         <testenv>测试环境</testenv>
    12         <projectenv>正式环境</projectenv>
    13     </env>
    14 </config>

        1、用三种方法读取xml文件内容:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: xxx
     5  * Date: 2016/11/28
     6  * Time: 9:36
     7  */
     8 // 使用三种方法来读取xml文件
     9 // 封装获取某一个节点,下面节点的value
    10 function getNodeValue($nodeName,$tagName){
    11     return $nodeName->getElementsByTagName($tagName)->item(0)->nodeValue;
    12 }
    13 
    14 // ---------------第一种方法-----DOM------------------------
    15 /*
    16 $xmlDoc = new DOMDocument();
    17 // 加载xml文件
    18 $xmlDoc->load('config.xml');
    19 // 获取dbmsg节点
    20 $dbmsg = $xmlDoc->getElementsByTagName('dbmsg')->item(0);
    21 // 打印db的相关信息
    22 echo 'host-->'.getNodeValue($dbmsg,'host')."<br>";
    23 echo 'port-->'.getNodeValue($dbmsg,'port')."<br>";
    24 echo 'user-->'.getNodeValue($dbmsg,'user')."<br>";
    25 echo 'password-->'.getNodeValue($dbmsg,'password')."<br>";
    26 echo 'db-->'.getNodeValue($dbmsg,'db')."<br>";
    27 */
    28 
    29 // ---------------第二种方法--------XPATH---------------------
    30 /*
    31 $xmlDoc = new DOMDocument();
    32 // 加载xml文件
    33 $xmlDoc->load('config.xml');
    34 // 实例化一个DOMXPath对象
    35 $xpath = new DOMXPath($xmlDoc);
    36 // 获取dbmsg节点,使用xpath来查询
    37 $dbmsg = $xpath->query('//dbmsg')->item(0);
    38 // 打印db的相关信息
    39 echo 'host-->'.getNodeValue($dbmsg,'host')."<br>";
    40 echo 'port-->'.getNodeValue($dbmsg,'port')."<br>";
    41 echo 'user-->'.getNodeValue($dbmsg,'user')."<br>";
    42 echo 'password-->'.getNodeValue($dbmsg,'password')."<br>";
    43 echo 'db-->'.getNodeValue($dbmsg,'db')."<br>";
    44 */
    45 // ---------------第三种方法--------SimpleXML---------------------
    46 $sipleXml = simplexml_load_file('config.xml');
    47 /*
    48 echo 'db type==>'.$sipleXml->dbmsg['type']."<br>";
    49 echo $sipleXml->dbmsg->host."<br>";
    50 echo $sipleXml->dbmsg->port."<br>";
    51 echo $sipleXml->dbmsg->user."<br>";
    52 echo $sipleXml->dbmsg->password."<br>";
    53 echo $sipleXml->dbmsg->db."<br>";
    54 */
    55 // siplexml配合xpath使用
    56 $dbmsg = $sipleXml->xpath("//dbmsg")[0];
    57 // 打印dbmsg的数据
    58 // 打印dbmsg的属性
    59 echo 'db type==>'.$dbmsg['type']."<br>";
    60 // 打印
    61 echo $dbmsg->host."<br>";
    62 echo $dbmsg->port."<br>";
    63 echo $dbmsg->user."<br>";
    64 echo $dbmsg->password."<br>";
    65 echo $dbmsg->db."<br>";

        2、向xml文件中添加:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: xxx
     5  * Date: 2016/11/28
     6  * Time: 11:12
     7  */
     8 $xmlDoc = new DOMDocument();
     9 $xmlDoc->load("config.xml");
    10 // 根目录
    11 $config = $xmlDoc->getElementsByTagName("config")->item(0);
    12 // 创建testenv节点
    13 $env = $xmlDoc->createElement("env");
    14 
    15 // 创建testenv
    16 $testenv = $xmlDoc->createElement("testenv");
    17 $testenv->nodeValue = '测试环境';
    18 $env->appendChild($testenv);
    19 
    20 // 创建正式环境 projectenv
    21 $projectenv = $xmlDoc->createElement("projectenv");
    22 $projectenv->nodeValue = '正式环境';
    23 $env->appendChild($projectenv);
    24 
    25 // 挂载env到config节点下
    26 $config->appendChild($env);
    27 // 保存xml文件
    28 $xmlDoc->save('config.xml');
    29 
    30 echo "add message success!";

        3、更新xml文件:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: xxx
     5  * Date: 2016/11/28
     6  * Time: 10:56
     7  */
     8 // 更新xml节点的数据
     9 
    10 $xmlDoc = new DOMDocument();
    11 $xmlDoc->load("config.xml");
    12 
    13 // 修改密码
    14 $xpath = new DOMXPath($xmlDoc);
    15 $pwd = $xpath->query('//password')->item(0);
    16 $pwd->nodeValue = 'root123';
    17 
    18 //save xml file
    19 $xmlDoc->save("config.xml");
    20 echo "update message success!";

        4、对xml文件进行删除操作:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: xxx
     5  * Date: 2016/11/28
     6  * Time: 13:54
     7  */
     8 // 删除xml中的节点
     9 $xmlDoc = new DOMDocument();
    10 $xmlDoc->load("config.xml");
    11 
    12 // 删除最后一个env节点
    13 $envs = $xmlDoc->getElementsByTagName('env');
    14 // 找到最后一个env节点
    15 $delenv = $envs->item($envs->length-1);
    16 // 移除delenv节点
    17 $delenv->parentNode->removeChild($delenv);
    18 
    19 // save xml file
    20 $xmlDoc->save("config.xml");
    21 echo 'delete success!';
  • 相关阅读:
    OpenGL ES学习001---绘制三角形
    Mac关机时处于黑屏状态
    静态变量和实例变量的区别(配图解释专业术语,通俗易懂)
    用shape画内圆外方,形成一个圆形头像
    最全的敏捷认证对比(CSM/PMI-ACP/EXIN)
    Certified Scrum Master CSM 中文资料大全
    如何打造优秀的远程敏捷团队(9步)
    博客搬家
    权威的国际敏捷认证Certified Scrum Master (CSM)
    博客园入驻了
  • 原文地址:https://www.cnblogs.com/xiaoshitoutest/p/6195329.html
Copyright © 2011-2022 走看看