使用php技术对xml文件进行操作
常用的三种技术
① php dom
② php 结合xpath 操作xml
③ SimpleXml
说明Dom
dom(document object model) 文档-对象-模型,核心思想是把一个xml文件,看成一个对象模型,然后通过对象的方式来操作xml文件
php dom技术对xml文件进行增删改查操作实例:
xml文件:
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?> <班级> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> <stu 性别="男" 年龄="100"><name>韩顺平8</name><sex>男</sex><age>80</age><介绍>学习不刻苦</介绍></stu> </班级> </span>
1、查询:
<span style="font-size:18px;"><?php header("Content-Type:text/html;Charset=utf-8"); //解析一个文件的步骤 //1.创建一个DOMDocument对象 表示文档 $xmldoc=new DOMDocument(); //2.指定加载哪个xml,解析哪个文件 $xmldoc->load("test.xml"); //3.获取你关心的节点 //把所有的学生获取(DOMNodeList ) $stus=$xmldoc->getElementsByTagName("stu"); /* var_dump($stus->item(4)); exit; */ //4.遍历 for($i=0;$i<$stus->length;$i++){ //取出学生 $stu=$stus->item($i); //各个信息 echo getNodeVal($stu,"name")."--" .getNodeVal($stu,"sex")."--".getNodeVal($stu,"age")."--".getNodeVal($stu,"介绍")."<br/>"; } function getNodeVal(&$MyNode,$tagName){ return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue; } ?> </span>2、添加:
<span style="font-size:18px;"><?php header("Content-Type:text/html;Charset=utf-8"); //该案例演示对xml文件的增删改 //1创建DOMDocument $xmldoc=new DoMDocument(); //2.加载xml文件 $xmldoc->load("test.xml"); //3.演示如何添加一个学生信息(同时增加一个性别的属性) //(1)取出根节点 $root=$xmldoc->getElementsByTagName("班级")->item(0); //(2)创建学生节点 $stu_node=$xmldoc->createElement("stu"); //echo $stu_node->nodeType; //******添加属性节点******* //创建属性节点 $stu_node->setAttribute("性别","男"); $stu_node->setAttribute("年龄","100"); //(3)创建名字节点 $stu_node_name=$xmldoc->createElement("name"); $stu_node_name->nodeValue="韩顺平8"; //为什么我们可以使用nodeValue属性?? //把名字节点挂载到学生节点下 $stu_node->appendChild($stu_node_name); // 创建性别 $stu_node_sex=$xmldoc->createElement("sex"); $stu_node_sex->nodeValue="男"; //把性别节点挂载到学生节点 $stu_node->appendChild($stu_node_sex); // 创建年龄 $stu_node_age=$xmldoc->createElement("age"); $stu_node_age->nodeValue="80"; //把年龄节点挂载到学生节点 $stu_node->appendChild($stu_node_age); //创建介绍节点 $stu_node_intro=$xmldoc->createElement("介绍"); $stu_node_intro->nodeValue="学习不刻苦"; $stu_node->appendChild($stu_node_intro); //把学生节点,挂载到根节点下 $root->appendChild($stu_node); //重新保存会xml //如果save到源文件,则相当于是对文件更新,添加了新的东西 //如果save 是新的文件名,则是保存到新文件(将原文件内容加刚加的内容全部添加到新文件中) $xmldoc->save("test.xml"); echo "成功!"; ?></span>
<span style="font-size:18px;"><?php header("Content-Type:text/html;Charset=utf-8"); //1创建DOMDocument $xmldoc=new DoMDocument(); //2.加载xml文件 $xmldoc->load("test.xml"); //3.演示如何添加一个学生信息 //(1)取出根节点 $root=$xmldoc->getElementsByTagName("班级")->item(0); //删除第3个学生 //1.找到该学生 $stus=$xmldoc->getElementsByTagName("stu"); $stu1=$stus->item(0); //$root->removeChild($stu1); /* DOM 属性: innerHTML - 节点(元素)的文本值 parentNode - 节点(元素)的父节点 childNodes - 节点(元素)的子节点 attributes - 节点(元素)的属性节点 */ //这里有一个更加灵活的方法 $stu1->parentNode->removeChild($stu1); //更新文件 $xmldoc->save("test.xml"); echo "删除ok"; ?></span>
<span style="font-size:18px;"><?php header("Content-Type:text/html;Charset=utf-8"); //更新某个节点值 //把第一个学生的年龄+10 //1.创建DOMDocument $xmldoc=new DoMDocument(); //2.加载xml文件 $xmldoc->load("test.xml"); //更新步骤 //(1)找到这个学生 $stus=$xmldoc->getElementsByTagName("stu"); $stu1=$stus->item(0); //即使下面只有一个指定名字标签,也要加 item(0) ,因为系统本身并不知道有几个,若不加,系统不能识别。 $stu1_age=$stu1->getElementsByTagName("age")->item(0); $stu1_age->nodeValue+=10; //更新文件 $xmldoc->save("test.xml"); echo "更新ok"; ?></span>