博客
关于我
【PHP对XML文件的操作技术【完整版】】
阅读量:427 次
发布时间:2019-03-06

本文共 8045 字,大约阅读时间需要 26 分钟。

无论是c/c++还是java、c#均有对XML文件操作的技术,PHP对XML文件的操作的技术主要有三种:

DOM、XPath、SimpleXml。

一、DOM

DOM:Document Object Model ,中文名字为“文档对象模型”

核心思想:把一个xml文件看作是一个对象模型,然后通过对象的方式来操作xml文件

注意:

当将xml文件看成对象的时候,一般将标签称作节点

解析xml文件的时候,相当于建立一棵树,树的节点可以表示标签、内容、属性等

DOM解析XML文件的流程:

1 PHP dom编程的步骤 2 1.创建DOMDocument 对象,代表文档xml。 3 $doc=new DOMDocument(); 4 如果是创建一个全新xml文档 5 $doc=new DOMDocument("1.0","utf-8"); 6 2.加载要处理的xml文档 7 $doc->load("xx.xml");//这个动作一旦形成,就会在内存形成DOM树。*********重点*********** 8 3.调用$list=$doc->getElementsByTagName("student");//获取节点列表 9 通过$list->length;获得学生的个数。10 如果想要获得第一个学生,$stu1=$list->item(0);11 //取出名字列表12 $namelist=$stu1->getElementsByTagName("名字");13 //取出第一个名字:14 $name1=$namelist->item(0)->nodeValue;15 tip:如果你希望知道$xmldoc有哪些方法或者属性,可以通过var_dump();查看。16 (DOMNodeList)17 4.调用DOMDocument、DOMNodeList、DOMElement和DOMNode的方法来对xml进行各种操作

对于DOM解析XML文件的技术要点均在增删改查操作上,即crud操作,如果程序员可以使用DOM技术实现对学生的增删改查,那么基本上就可以认为掌握了DOM解析XML文件的核心技术。

以下使用DOM技术完成在线词典的案例,并实现增删查改的功能。

文件ciku.xml功能是存放单词,相当于一个小型数据库。

1 
2
3
4
word
5
单词
6
7
8
boy
9
男孩
10
11
12
girl
13
女孩
14
15
apple
桃子
apple
苹果
View Code

文件interface.php提供了增删查改的图形化界面

1  2  3     
4 5 6
7

谷歌在线词典

8
9

查询

10
11 请输入英语单词:
12
13
14
15
16 17

添加

18
19 请输入英语单词:
20 请输入汉语单词:
21
22
23
24
25 26

删除

27
28 请输入英语单词:
29
30
31
32
33 34

修改

35
36 请输入英语单词:
37 请输入汉语单词:
38
39
40
41
42 43
44 45
View Code

文件process.php接收interface.php发来的请求,并处理。

1 
load("ciku.xml"); 9 //分类10 if($type=="search")11 {12 $en=$_POST['en_search'];13 //执行查询功能14 search($en,$domxml);15 }16 else if($type=="add")17 {18 $en=$_POST['en_add'];19 $ch=$_POST['ch_add'];20 add($en,$ch,$domxml);21 }22 else if($type=="delete")23 {24 $en=$_POST['en_delete'];25 delete_($en,$domxml);26 }27 else if($type=="update")28 {29 $en=$_POST["en_update"];30 $ch=$_POST["ch_update"];31 echo "将要修改".$en."的释义"."$ch";32 //这里修改比较简单,不再阐述。33 }34 ?>
View Code

文件functions.php封装了四个方法,分别实现了增删查改的功能,由process.php调用

1 
getElementsByTagName("root")->item(0)->getElementsByTagName("word"); 5 for($i=0;$i<$root->length;$i++) 6 { 7 $en_get=$root->item($i)->getElementsByTagName("en")->item(0)->nodeValue; 8 echo "英语:".$en_get; 9 $ch_get=$root->item($i)->getElementsByTagName("ch")->item(0)->nodeValue;10 echo "  &nbsp汉语:".$ch_get;11 echo "
";12 }13 }14 15 function add($en_value,$ch_value,$domxml)16 {17 18 //echo "英语:".$en."
"."汉语:".$ch."
";19 $word=$domxml->createElement("word");20 $en=$domxml->createElement("en");21 $ch=$domxml->createElement("ch");22 $en->nodeValue=$en_value;23 $ch->nodeValue=$ch_value;24 25 $root=$domxml->getElementsByTagName("root")->item(0);26 27 $word->appendChild($en);28 $word->appendChild($ch);29 $root->appendChild($word);30 31 //给单词加上属性值32 $word->setAttribute("id","123");33 34 $domxml->save("ciku.xml");35 36 echo "添加信息成功!
添加的信息为:
英语单词:$en_value
汉语单词:$ch_value
";37 }38 39 function delete_($en_value,$domxml)40 {41 //echo "将要删除".$en_value."单词!";42 $root=$domxml->getElementsByTagName("root")->item(0);43 $word=$root->getElementsByTagName("word");44 for($i=0;$i<$word->length;$i++)45 {46 if($word->item($i)->getElementsByTagName("en")->item(0)->nodeValue==$en_value)47 {48 $root->removeChild($word->item($i));49 }50 }51 //删除掉信息之后千万要记得保存信息到XML文件52 $domxml->save("ciku.xml");53 echo "成功删除了指定信息!";54 }55 ?>
View Code

注意:增删改的操作操作完成以后要使用DomDocument的save方法将文件保存,否则操作不会生效。

二.XPath讲解

什么是XPath:

XPath是一种表示节点位置的语言,可以用来描述XML元素的位置,如同硬盘资料夹的档案路径:c:\\wamp\\www\\uuu\\myClass.xml

使用XPath的好处:

虽然使用PHPdom编程我们可以解决掉所有的问题,但是我们为了取得一个节点,往往要一层一层的剥开,非常麻烦。XPath解决了这个问题,XPath的最大好处就是跨层取节点。

XPath的核心设计思想:可以通过XPath迅速简捷的定位你希望查找的节点。

XPath的使用方法:

PHP程序在载入XML文件建立domdocument对象之后,就可以建立domxpath对象,如下所示:

$xpath=new DOMXPth($doc);
在建立好DOMXPath对象$xpath之后,就可以使用query()方法找出XPath位置路径表达式的节点对象。如下所示:
$items=$xp->query("xpath路径表达式");
上述query()方法的参数是XPath表达式,传回DOMNodeList对象,如果没有找到节点,就返回空。

代码示例:

data.xml装载了数据

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
View Code

process.php内容是控制语句

1 
load("date.xml"); 4 $domxpath=new DOMXPath($domxml); 5 $nodelist=$domxpath->query("CCC/DDD/BBB");//换上不同的查询语句,即可获得不同的效果。 6 print_all($nodelist); 7 function print_all($nodelist) 8 { 9 echo "节点数量:".$nodelist->length."
";10 for($i=0;$i<$nodelist->length;$i++)11 {12 echo $nodelist->item($i)->tagName."
";13 }14 }15 ?>

注意上面的代码:$nodelist=$domxpath->query("CCC/DDD/BBB");query中的表达式是可以变的,而且非常灵活,详情可以查看XPath手册。

这个示例是XPath单独使用的案例,我们还可以将之与其它技术搭配使用,如SimpleXML

三、SimpleXML

SimpleXML,顾名思义,就是简单的XML,相对于DOM,SimpleXML操作XML文件更简单。

核心思想:以面向对象的方式来操作xml文件。

实质:PHP5的SimpleXML可以将XML文件的元素都转换成对象,相同子元素转换成对象数组,让我们在PHP程序直接使用foreach指令和取得指定元素的名称、内容和属性值。

3.1如何加载XML文件

simpleXML可以通过三种方式装载XML文件。

(1).直接装载文件。
(2).装载dom对象。
(3).装载字符串,该string要求按照xml文件的标准写。

3.1.1通过simplexml_load_file()函数来载入xml文件档案,

例如:$library=simplexml_loadfile("book.xml");
上述程序载入xml文件档案book.xml,函数传回SimpleXMLElement类型的对象,载入失败传回false

3.1.2通过装载字符串载入XML文件:

字符串需要特殊处理:$string =<<<XML  字符串内容  XML;这种写法是用于可以简单的处理字符中有“” 或者'的情况。

3.1.3通过simplexml_import_dom方法加载DOMDocument对象

3.2怎样取出属性的值?

属性值是节点的数组下标。

使用SimpleXML和XPath的综合小案例

data.xml存放数据

1 
2
3
4
PHP: Behind the Parser 5
6
7
Ms. Coder
8
Onlivia Actora
9
10
11
Mr. Coder
12
El ActÓr
13
14
15
16 So, this language. It's like, a programming language. Or is it a17 scripting language? All is revealed in this thrilling horror spoof18 of a documentary.19
20
21
PHP solves all my web problems
22
23
7
24
5
25
26
View Code

simplexml.php存放控制语句

1 
load("data.xml"); 4 $movies = simplexml_import_dom($domxml); 5 6 echo $movies->movie[0]->plot."
";//取出plot标签中中的内容。 7 echo $movies->movie[0]->rating[0]["type"]."
";//取出第一个rating标签的type属性值。 8 echo "
"; 9 $rusult=$movies->xpath("//rating");//SimpleXML和xpath相结合使用,功能更加强大。10 var_dump($rusult);11 echo "
";12 foreach($rusult as $value)13 {14 echo $value."
";15 }16 17 ?>
View Code

 

转载地址:http://twcyz.baihongyu.com/

你可能感兴趣的文章
线性代数应该这样学9:上三角矩阵、对角矩阵
查看>>
【科学计算】插值理论
查看>>
centos7一步一步搭建docker jenkins 及自定义访问路径重点讲解
查看>>
深度学习一:深度前馈网络和反向传播
查看>>
在wxPython使ListCtrl占据整个窗口
查看>>
微软面试题
查看>>
Google新玩法(转载)
查看>>
C#中Dispose和Close的区别!
查看>>
如何让服务在流量暴增的情况下保持稳定输出
查看>>
一个20年技术老兵的 2020 年度技术总结
查看>>
一例完整的websocket实现群聊demo
查看>>
SQLSERVER数据库死锁与优化杂谈
查看>>
【Net】ABP框架学习之它并不那么好用
查看>>
Git 笔记
查看>>
Harbor 批量清理历史镜像
查看>>
使用Azure Functions玩转Serverless
查看>>
.NET Core 基于Websocket的在线聊天室
查看>>
使用MySQL Shell创建MGR
查看>>
win10新版wsl2使用指南
查看>>
spring-boot 使用hibernate validation对参数进行优雅的校验
查看>>