使用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>
3、删除:
<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>
4、更新:
<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>