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

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

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

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

xml文件的格式为:

 <?xml version="1.0" encoding="utf-8"?>
<config>
<dbmsg type="mysql">
<host>127.0.0.1</host>
<port>3306</port>
<user>root</user>
<password>root123</password>
<db>ksuditest</db>
</dbmsg>
<env>
<testenv>测试环境</testenv>
<projectenv>正式环境</projectenv>
</env>
</config>

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

 <?php
/**
* Created by PhpStorm.
* User: xxx
* Date: 2016/11/28
* Time: 9:36
*/
// 使用三种方法来读取xml文件
// 封装获取某一个节点,下面节点的value
function getNodeValue($nodeName,$tagName){
return $nodeName->getElementsByTagName($tagName)->item(0)->nodeValue;
} // ---------------第一种方法-----DOM------------------------
/*
$xmlDoc = new DOMDocument();
// 加载xml文件
$xmlDoc->load('config.xml');
// 获取dbmsg节点
$dbmsg = $xmlDoc->getElementsByTagName('dbmsg')->item(0);
// 打印db的相关信息
echo 'host-->'.getNodeValue($dbmsg,'host')."<br>";
echo 'port-->'.getNodeValue($dbmsg,'port')."<br>";
echo 'user-->'.getNodeValue($dbmsg,'user')."<br>";
echo 'password-->'.getNodeValue($dbmsg,'password')."<br>";
echo 'db-->'.getNodeValue($dbmsg,'db')."<br>";
*/ // ---------------第二种方法--------XPATH---------------------
/*
$xmlDoc = new DOMDocument();
// 加载xml文件
$xmlDoc->load('config.xml');
// 实例化一个DOMXPath对象
$xpath = new DOMXPath($xmlDoc);
// 获取dbmsg节点,使用xpath来查询
$dbmsg = $xpath->query('//dbmsg')->item(0);
// 打印db的相关信息
echo 'host-->'.getNodeValue($dbmsg,'host')."<br>";
echo 'port-->'.getNodeValue($dbmsg,'port')."<br>";
echo 'user-->'.getNodeValue($dbmsg,'user')."<br>";
echo 'password-->'.getNodeValue($dbmsg,'password')."<br>";
echo 'db-->'.getNodeValue($dbmsg,'db')."<br>";
*/
// ---------------第三种方法--------SimpleXML---------------------
$sipleXml = simplexml_load_file('config.xml');
/*
echo 'db type==>'.$sipleXml->dbmsg['type']."<br>";
echo $sipleXml->dbmsg->host."<br>";
echo $sipleXml->dbmsg->port."<br>";
echo $sipleXml->dbmsg->user."<br>";
echo $sipleXml->dbmsg->password."<br>";
echo $sipleXml->dbmsg->db."<br>";
*/
// siplexml配合xpath使用
$dbmsg = $sipleXml->xpath("//dbmsg")[0];
// 打印dbmsg的数据
// 打印dbmsg的属性
echo 'db type==>'.$dbmsg['type']."<br>";
// 打印
echo $dbmsg->host."<br>";
echo $dbmsg->port."<br>";
echo $dbmsg->user."<br>";
echo $dbmsg->password."<br>";
echo $dbmsg->db."<br>";

2、向xml文件中添加:

 <?php
/**
* Created by PhpStorm.
* User: xxx
* Date: 2016/11/28
* Time: 11:12
*/
$xmlDoc = new DOMDocument();
$xmlDoc->load("config.xml");
// 根目录
$config = $xmlDoc->getElementsByTagName("config")->item(0);
// 创建testenv节点
$env = $xmlDoc->createElement("env"); // 创建testenv
$testenv = $xmlDoc->createElement("testenv");
$testenv->nodeValue = '测试环境';
$env->appendChild($testenv); // 创建正式环境 projectenv
$projectenv = $xmlDoc->createElement("projectenv");
$projectenv->nodeValue = '正式环境';
$env->appendChild($projectenv); // 挂载env到config节点下
$config->appendChild($env);
// 保存xml文件
$xmlDoc->save('config.xml'); echo "add message success!";

3、更新xml文件:

 <?php
/**
* Created by PhpStorm.
* User: xxx
* Date: 2016/11/28
* Time: 10:56
*/
// 更新xml节点的数据 $xmlDoc = new DOMDocument();
$xmlDoc->load("config.xml"); // 修改密码
$xpath = new DOMXPath($xmlDoc);
$pwd = $xpath->query('//password')->item(0);
$pwd->nodeValue = 'root123'; //save xml file
$xmlDoc->save("config.xml");
echo "update message success!";

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

 <?php
/**
* Created by PhpStorm.
* User: xxx
* Date: 2016/11/28
* Time: 13:54
*/
// 删除xml中的节点
$xmlDoc = new DOMDocument();
$xmlDoc->load("config.xml"); // 删除最后一个env节点
$envs = $xmlDoc->getElementsByTagName('env');
// 找到最后一个env节点
$delenv = $envs->item($envs->length-1);
// 移除delenv节点
$delenv->parentNode->removeChild($delenv); // save xml file
$xmlDoc->save("config.xml");
echo 'delete success!';

php对xml文件进行CURD操作的更多相关文章

  1. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  2. 【转】C#对XML文件的各种操作实现方法

    [转]C#对XML文件的各种操作实现方法 原文:http://www.jb51.net/article/35568.htm XML:Extensible Markup Language(可扩展标记语言 ...

  3. 【JAVA解析XML文件实现CRUD操作】

    一.简介. 1.xml解析技术有两种:dom和sax 2.dom:Document Object Model,即文档对象模型,是W3C组织推荐的解析XML的一种方式. sax:Simple API f ...

  4. java代码用dom4j解析xml文件的简单操作

    时间: 2016/02/17 目标:为telenor的ALU Femto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中. 从网上搜了下,有四种常用的解析xml的 ...

  5. XML文件的一些操作

    XML 是被设计用来传输和存储数据的, XML 必须含有且仅有一个 根节点元素(没有根节点会报错) 源码下载 http://pan.baidu.com/s/1ge2lpM7 好了,我们 先看一个 XM ...

  6. xml文件的读写操作

    1.直接上代码:包含了xml文档的创建,读取xml文档,创建根节点,向根节点中添加子节点,保存xml文档----------先来张效果图: static void Main(string[] args ...

  7. Qt5 对xml文件常用的操作(读写,增删改查)

    转自:https://blog.csdn.net/hpu11/article/details/80227093 项目配置 pro文件里面添加QT+=xml include <QtXml>, ...

  8. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  9. c#操作XML文件的通用方法

    转载地址:http://www.studyofnet.com/news/36.html 原址没找到 sing System; using System.Data; using System.Confi ...

随机推荐

  1. SQL Server认证培训与考试

    Microsoft 技术专员 (MTA) - 数据库 https://www.microsoft.com/zh-cn/learning/mta-certification.aspx MCSA: SQL ...

  2. 跟我一起云计算(4)——lucene

    了解lucene的基本概念 这一部分可以参考我以前写的博客: http://www.cnblogs.com/skyme/tag/lucene/ lucene是什么 下图是一个很好的说明: 1.luce ...

  3. SWF READER 破解日志。

    网上传闻swf reader是破解最厉害的神器,可以内存抓取+doSWF反编译.所以去官网下了一个: SWF_Reader_2.3 不出所料,demo版本没有反编译的功能.网上搜到一个哥们尝试了下: ...

  4. Vue的一个陷阱

    最近做项目,上线前一直有个bug,不知道是什么原因引起的, vm.$set('needVerification', true); $('.verification-button').prop('dis ...

  5. redis数据结构整理(一)

    摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单 ...

  6. Docker镜像

    docker镜像123? 额,由于没有实验环境,没有亲手实践,因此理解可能有不对的地方. 反正也是学习笔记,以后再修改吧... docker的镜像跟virtualbox的镜像不一样.在虚拟机中,镜像是 ...

  7. NFC:Arduino、Android与PhoneGap近场通信

    NFC:Arduino.Android与PhoneGap近场通信(第一本全面讲解NFC应用开发的技术著作移动智能设备近距离通信编程实战入门) [美]Tom Igoe(汤姆.伊戈),Don Colema ...

  8. ui-router带参数的ui-sref配置

    ui-router带参数的ui-sref配置 路由 .state('app.user_edit', { url:'user/userid/:userid', templateUrl: 'compone ...

  9. 第四节:Vue表单标签和组件的基本用法,父子组件间的通信

    vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...

  10. 分享.NET系统开发过程中积累的扩展方法

    .NET 3.5提供的扩展方法特性,可以在不修改原类型代码的情况下扩展它的功能.下面分享的这些扩展方法大部分来自于Code Project或是Stackoverflow,.NET为此还有一个专门提供扩 ...