PHP---XML---DOM

PHP 对xml进行操作,常用有3种技术
1.dom------文档对象模型,核心思想,把一个xml文件看成一个对象模型,通过对象的方式操作xml文件
2.php结合xpath

3.SimpleXml


下面来说下dom技术,使用dom来解析xml的步骤是

1.创建DOMDocument对象,代表文档xml
$doc= new DOMDocument();
如果是创建一个全新的xml文档
$doc= new DOMDocument("1.0","utf-8");
2.加载要处理的xml文档
$doc->load("xx.xml");
3.调用$doc->getElementByTagName("")获取节点列表(DOMNodeList)
4.调用DOMDocument、DOMNodeList、DOMElement和DOMNode的方法来对xml进行各种操作(crud操作)



我们使用dom来对xml进行crud操作,为了便于理解,是按功能分开写的,如果使用中,可以封装成一个类

1.查询的代码:

<?php
$xmldoc=new DOMDocument();
$xmldoc->load("01classes.xml");
$students=$xmldoc->getElementsByTagName("stu");
for($i=0;$i<$students->length;$i++){
//取出学生
$stu=$students->item($i);
//取出各个信息
echo getNodeVal($stu,"name")."---";
echo getNodeVal($stu,"age")."---";
echo getNodeVal($stu,"sex")."<br/>";
}

//写一个函数来简化我们的取值操作
function getNodeVal(&$MyNode,$tagName){
return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue;
}
?>

2.增加数据的代码

<?php
//1.创建DOMDocument
$xmldoc= new DOMDocument();
//2.加载文件
$xmldoc->load("01classes.xml");
//3.读取节点
//(1)取出根节点
//这个是根节点,因为班级是最上层的节点,所以结果只有一个,item(0)就是根节点了
$root=$xmldoc->getElementsByTagName("班级")[0];//如果有中文,需要注意一定是utf-8
//(2)创建学生节点
$stu_node=$xmldoc->createElement("stu");
//echo $stu_node->nodeType;返回节点属性,返回值是整形,需要查定义表,看该值代表的具体属性
//================添加属性节点=========================
//创建属性节点
$stu_node->setAttribute("intro","好人");
//(3)创建名字节点
$stu_node_name=$xmldoc->createElement("name");
$stu_node_name->nodeValue="黄弋8";
//把名字节点挂载到学生节点下
$stu_node->appendChild($stu_node_name);
//创建年龄
$stu_node_age=$xmldoc->createElement("age");
$stu_node_age->nodeValue="222";
//把年龄节点挂载到学生节点下
$stu_node->appendChild($stu_node_age);
  //创建性别
$stu_node_sex=$xmldoc->createElement("sex");
$stu_node_sex->nodeValue="男";
//把性别节点挂载到学生节点下
$stu_node->appendChild($stu_node_sex);
//把完成后的学生节点挂载到根节点下
$root->appendChild($stu_node);
//重新保存回xml文件
//如果save到源文件,则会覆盖更新源文件
//如果save新文件名,则是创建新文件
$xmldoc->save("01classes.xml");
?>


3.删除的代码

<?php
//1.创建DOMDocument
$xmldoc= new DOMDocument();
//2.加载文件
$xmldoc->load("01classes.xml");
//3.读取节点
//取出根节点
//这个是根节点,因为班级是最上层的节点,所以结果只有一个,item(0)就是根节点了
$root=$xmldoc->getElementsByTagName("班级")[0];//如果有中文,需要注意一定是utf-8
//删除第3个学生
//(1)找到这个学生
$stus=$xmldoc->getElementsByTagName("stu");
$stu1=$stus->item(2);
//如果是删除属性,使用removeAttribute(name)
$stu1->removeAttribute("intro");
//$root->removeChild($stu1);
//这里有一个更加灵活的方法,意思是我想删除 a节点,我先找到它的父节点,有了父节点就可以删除掉a节点
//所以如果是删除的话,可以不取根节点,取$root变得没有意义
//$stu1->parentNode->removeChild($stu1);
$xmldoc->save("01classes.xml");
echo "删除成功!";
?>


4.修改更新的代码

<?php
//此内容为更新
//把第一个学生的年龄+10岁
//1.创建DOMDocument
$xmldoc= new DOMDocument();
//2.加载文件
$xmldoc->load("01classes.xml");
//更新步骤
//(1)找到这个学生
$stus=$xmldoc->getElementsByTagName("stu");
$stu1=$stus->item(0);
//取出年龄节点
$stu1_age=$stu1->getElementsByTagName("age")->item(0);
$stu1_age->nodeValue+=10;
$xmldoc->save("01classes.xml");
echo "更新成功!";
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值