功能简介:使用PHP Xml DOM编程技术对XML进行查询、添加、修改、删除操作;
php dom 查询案例
/// myClass.xml
<?xml version="1.0" ?>
<!DOCTYPE 班级 SYSTEM “class.dtd">
<班级>
<学生>
<名字>周星驰</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生>
<名字>林青霞</名字>
<年龄>32</年龄>
<介绍>是一个好学生</介绍>
</学生>
</班级>
/// myClassRead.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<?php
///特别说明:请保证文件的存储编码是utf-8,和meta保持一致;
//1.创建DOMDocument 对象,表示文档
$xmldoc=new DOMDocument();
//2.加载xml文件
$xmldoc->load("myClass.xml");
///3.开始解析
//3-1获取所有学生节点
$stus=$xmldoc->getElementsByTagName("学生");
//var_dump($stus);
//echo "stuNum=".$stus->length;
//3-2取出第一个学生
echo "<br/>=>单个取出学生的信息<br/>";
$stu1=$stus->item(0);
//取出名字
echo "名字是=".$stu1->getElementsByTagName("名字")->item(0)->nodeValue;
echo "<br/>名字是=".getNodeVal($stu1,"名字");
echo "<br/>年龄是=".getNodeVal($stu1,"年龄");
echo "<br/>介绍是=".getNodeVal($stu1,"介绍");
//3-3遍历所有学生的信息
echo "<br/>=>遍历取出所有学生信息<br/>";
for($i=0;$i<$stus->length;$i++){
echo "<br/>";
$stu=$stus->item($i);
echo getNodeVal($stu,"名字");
echo getNodeVal($stu,"年龄");
echo getNodeVal($stu,"介绍");
echo $stu->getAttribute("性别");
}
// 获取节点值 (封装)
function getNodeVal(&$myNode,$tagName){
return $myNode->getElementsByTagName($tagName)->item(0)->nodeValue;
}
?>
</html>
php xml 增加修改删除案例
/// myClass.xml 文档
<?xml version="1.0" ?>
<班级>
<学生>
<名字>周星驰</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生>
<名字>林青霞</名字>
<年龄>32</年龄>
<介绍>是一个好学生</介绍>
</学生>
</班级>
/// myClass.php页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<?php
//1.创建对象: 创建一个文档对象
$doc= new DOMDocument();
$doc->formatOutput=true;
//2.加载文档: 加载要解析的文件
$doc->load('myClass.xml');
//3.得到根元素【 不能直接使用 $doc去添加,因为$doc是指向文档,而不是根元素 学生】
$root = $doc->getElementsByTagName("班级")->item(0);
/// =>4、添加学生
/*
//4-1-1 创建学生节点
$stu=$doc->createElement("学生");
//4-1-2 设置学生属性
$stu->setAttribute("sex","女");
//4-2-1 创建名字节点
$stuName=$doc->createElement("名字");
//4-2-2 设值名字文本节点: 给名字创建文本节点 (这里也可以直接使用 $stuName->nodeValue=“韩顺平”,给定文本节点值.)
$stuName_val=$doc->createTextNode("韩顺平");
//4-2-3 附加文本节点
$stuName->appendChild($stuName_val);
//4-3 附加名字节点: 把名字节点挂到学生节点上
$stu->appendChild($stuName);
//4-4 附加学生节点: 如果要指定添加到某个学生后,可以使用insertBefore这个方法,请参考文档.
$root->appendChild($stu);
// 4-5 保存修改
$doc->save('myClass.xml');
echo '<br/>添加节点ok!';
*/
/// 5、删除学生: 删除第一个学生;
/*
//5-1. 获取到第一个学生
$stu1=$doc->getElementsByTagName("学生")->item(0);
//5-2. 删除,这种删除方法比较笨,可以通过获取其父节点,然后删除
//$root->removeChild($stu1);
$stu1->parentNode->removeChild($stu1);
//5-3.更新
$doc->save('myClass.xml');
echo '<br/>删除ok';*/
/// 6、修改学生的信息,比如修改第一个学生的名字和性别
//6-1.先获取该学生
$stu1=$doc->getElementsByTagName("学生")->item(0);
//6-2.修改性别
$stu1->setAttribute("sex","中性");
//6-3.修改名字 [这里也可以封装成一个函数]
$stu1->getElementsByTagName("名字")->item(0)->nodeValue="韦小宝";
//6-4.保存
$doc->save('myClass.xml');
echo '<br/>修改 ok';
?>
</html>