【PHP对XML文件的操作技术【完整版】】

无论是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 <?xml version="1.0" encoding="utf-8"?>
 2 <root>
 3     <word>
 4         <en>word</en>
 5         <ch>单词</ch>
 6     </word>
 7     <word>
 8         <en>boy</en>
 9         <ch>男孩</ch>
10     </word>
11     <word>
12         <en>girl</en>
13         <ch>女孩</ch>
14     </word>
15 <word id="123"><en>apple</en><ch>桃子</ch></word><word id="123"><en>apple</en><ch>苹果</ch></word></root>

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

 1 <html>
 2 <head>
 3     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
 4 </head>
 5 <body>
 6 <center>
 7 <h1>谷歌在线词典</h1>
 8 <br/><br/>
 9 <h2>查询</h2>
10 <form action="process.php" method="post">
11     请输入英语单词:<input type="text" name="en_search"/><br/><br/>
12     <input type="hidden" name="type" value="serch"/>
13     <input type="submit" value="单击此处查询"/>
14     <br/><br/><br/><br/>
15 </form>
16
17 <h2>添加</h2>
18 <form action="process.php" method="post">
19     请输入英语单词:<input type="text" name="en_add"/><br/>
20     请输入汉语单词:<input type="text" name="ch_add"/><br/><br/>
21     <input type="hidden" name="type" value="add"/>
22     <input type="submit" value="单击此处添加新信息"/>
23     <br/><br/><br/><br/>
24 </form>
25
26 <h2>删除</h2>
27 <form action="process.php" method="post">
28     请输入英语单词:<input type="text" name="en_delete"/><br/><br/>
29     <input type="hidden" name="type" value="delete"/>
30     <input type="submit" value="单击此处删除此单词"/>
31     <br/><br/><br/><br/>
32 </form>
33
34 <h2>修改</h2>
35 <form action="process.php" method="post">
36     请输入英语单词:<input type="text" name="en_update"/><br/>
37     请输入汉语单词:<input type="text" name="ch_update"/><br/><br/>
38     <input type="hidden" name="type" value="update"/>
39     <input type="submit" value="单击此处修改信息"/>
40     <br/><br/><br/><br/>
41 </form>
42
43 </center>
44 </body>
45 </html>

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

 1 <?php
 2 require_once("functions.php");
 3 //1.接收输入的英文单词
 4 $type=$_POST[‘type‘];
 5 //2.创建dom对象。
 6 $domxml=new DOMDocument("1.0","utf-8");
 7 //3.加载xml文件
 8 $domxml->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 ?>

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

 1 <?php
 2     function serch($en,$domxml)
 3     {
 4         $root=$domxml->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;&nbsp;&nbsp汉语:".$ch_get;
11             echo "<br/>";
12         }
13     }
14
15     function add($en_value,$ch_value,$domxml)
16     {
17
18         //echo "英语:".$en."<br/>"."汉语:".$ch."<br/>";
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 "添加信息成功!<br/>添加的信息为:<br/>英语单词:$en_value<br/>汉语单词:$ch_value<br/>";
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 ?>

注意:增删改的操作操作完成以后要使用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 <?xml version="1.0" encoding="utf-8"?>
 2  <AAA>
 3           <XXX>
 4                <DDD>
 5                     <BBB/>
 6                     <BBB/>
 7                     <EEE/>
 8                     <FFF/>
 9                </DDD>
10           </XXX>
11           <CCC>
12                <DDD>
13                     <BBB/>
14                     <BBB/>
15                     <EEE/>
16                     <FFF/>
17                </DDD>
18           </CCC>
19           <CCC>
20                <BBB>
21                     <BBB>
22                          <BBB/>
23                     </BBB>
24                </BBB>
25           </CCC>
26      </AAA> 

process.php内容是控制语句

 1 <?php
 2 $domxml=new DOMDocument("1.0","utf-8");
 3 $domxml->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."<br/>";
10     for($i=0;$i<$nodelist->length;$i++)
11     {
12         echo $nodelist->item($i)->tagName."<br/>";
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 <?xml version=‘1.0‘ standalone=‘yes‘?>
 2 <movies>
 3  <movie>
 4   <title>PHP: Behind the Parser</title>
 5   <characters>
 6    <character>
 7     <name>Ms. Coder</name>
 8     <actor>Onlivia Actora</actor>
 9    </character>
10    <character>
11     <name>Mr. Coder</name>
12     <actor>El ActÓr</actor>
13    </character>
14   </characters>
15   <plot>
16    So, this language. It‘s like, a programming language. Or is it a
17    scripting language? All is revealed in this thrilling horror spoof
18    of a documentary.
19   </plot>
20   <great-lines>
21    <line>PHP solves all my web problems</line>
22   </great-lines>
23   <rating type="thumbs">7</rating>
24   <rating type="stars">5</rating>
25  </movie>
26 </movies>

simplexml.php存放控制语句

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

时间: 2024-10-29 19:10:15

【PHP对XML文件的操作技术【完整版】】的相关文章

Nodejs+HTML5兼容IE789的大文件上传完整版

业余将大文件上传重新梳理了一遍,后端基于Nodejs:有几个要点感觉很好玩: 兼容性:IE789为代表: 跨域上传:document.domain||middlePage: 多文件上传:input['type=file'] multiple: 拖拽上传:drag drop: 大文件分段:files.slice(s,e): 断点续传:localStorage: 接收分段的文件:formidable.onPart: 陆续写入分段文件:fs.write(fd,bf,offset,length,posi

xml笔记之完整版(一)

xml笔记之完整版(一) 好记性不如烂笔头,边学边忘记的我不得不承认,笔记是如此重要.最近学习了XML需要做个笔记,以便日后查看.xml的内容其实并不多,但是之前从未系统进行学习,以至于望而生畏.所以最近系统学习了一下,做个总结. xml内容大致以下方面 1.XML及其语法. 2.XML约束之DTD   XML约束之Schema (两种约束). 3.XML编程(CRUD---Create Read Update Delete). 4.三种xml 解析器 dom sax Dom4j. 依次进行讲述

office2016 软件全集 官方下载免费完整版(含破解文件)不含垃圾软件 win10完美激活

office2016官方下载免费完整版是新一代办公软件,office2016官方下载免费完整版已经分享到下面,office2016官方下载免费完整版包括了Word.Excel.PowerPoint.OneNote.Outlook.Skype.Project.Visio以及Publisher等组件和服务.下面分享:office2016软件的下载.安装及激活. 本文来自互联网,按原教程安装结果中招了,因含有垃圾软件,所以决定改写,以免你懂的... 注册文件下载中含有垃圾软件,请按下面的步骤操作会跳过

ThinkPHP3.2.3完整版创建前后台入口文件 http://jingyan.baidu.com/article/7e4409533fc1092fc1e2ef53.html

ThinkPHP3.2.3完整版创建前后台入口文件 1 2 3 4 5 6 7 分步阅读 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的优秀的国产php框架,值得我们去探索学习"创建前台-后台入口文件" 工具/原料 Zend Studio 13.0.0(其他版本都行) 下载地址:http://pan.baidu.com/s/1hrddyh2 含thinkPHP完整版的项目 下载地址:http://www.thinkphp.cn/ windows 操作系统电脑一台

【PHP XML与dtd概述【完整版】】

一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. version:文档符合xml1.0规范,我们学习的一般都是1.0encoding:文档字符编码,比如gb2312,一般使用utf-8standalone:文档定义是否独立使用standalone="yes",表名文档独立使用standalone="no":默认 XML文档有且

C#中操作XML (修改完整版)

1.新建一个XML文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?><bookstore>  <book genre="fantasy" ISBN="2-3631-4">    <title>Oberon's Legacy</title>    <author>Corets, Eva&l

【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】

引言: 前面转载过一篇团队兄弟[伊利丹]写的NN HA实验记录,我也基于他的环境实验了NN HA对于Client的透明性. 本篇文章记录的是亲自配置NN HA的详细全过程,以及全面测试HA对客户端访问透明性的全过程,希望对大家有帮助. 实验环境: Hadoop2.2.0的4节点集群,ZK节点3个(ZK节点数最好为奇数个),hosts文件和各节点角色分配如下: hosts: 192.168.66.91 master 192.168.66.92 slave1 192.168.66.93 slave2

Android照片墙完整版,完美结合LruCache和DiskLruCache

转载地址:http://blog.csdn.net/guolin_blog/article/details/34093441#comments 在上一篇文章当中,我们学习了DiskLruCache的概念和基本用法,但仅仅是掌握理论知识显然是不够的,那么本篇文章我们就来继续进阶一下,看一看在实战当中应该怎样合理使用DiskLruCache.还不熟悉DiskLruCache用法的朋友可以先去参考我的上一篇文章 Android DiskLruCache完全解析,硬盘缓存的最佳方案 . 其实,在真正的项

用python处理xml文件并且用soap发送

新的需求中处理数据需要有个payment的操作,功能测试是用soapui发送xml,但是因为那个xml需要的数据较多并且比较麻烦所以想做成自动化,捣鼓了快一周终于成功了QUQ 不容易 记录下做的时候遇到的坑和points 1.数据获取 拼xml要从ORACLE中查询多个表单,一开始是写了几个def每个对应一张表的sql 因为中间会有一些上张表的结果是下张的取值,一开始想直接都写到文件里 结果发现执行的时候因为有pyc所以不是实时获取的 改成return,最后输出四个表的结果整在一个return