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!‘;
时间: 2024-10-12 15:57:30