php技术对xml文件进行操作

使用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>


你可能感兴趣的:(php技术对xml文件进行操作)