原文:PHP操作XML文件学习笔记

  XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据。

  对于XML的操作包括遍历,生成,修改,删除等其他类似的操作。PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考

  http://www.oschina.net/code/snippet_110138_4727

  1.对XML文件的遍历

    通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对象,然后引入要操作的XML文件。即:

 $doc = new DOMDocument();
$doc->load("test.xml");

    对于XML的遍历是通过获取XML文件中的标签名称,从而获取标签中的内容的,例如XML文件内容为:

<?xml version="1.0" encoding="utf-8" ?>
<school>
<student>
<name>张三</name>
<sex>男</sex>
<age>19</age>
</student>
<student>
<name>李四</name>
<sex>女</sex>
<age>18</age>
</student>
<student>
<name>王五</name>
<sex>男</sex>
<age>19</age>
</student>
</school>

    现在通过PHP遍历出每个student的信息,通过 getElementsByTagName() 方法获取到指定名称的标签并存为数组,然后遍历信息:

 $content = $doc->getElementsByTagName("student");
foreach($content as $value){
echo $value->nodeValue."<br />";
}

  注意:在遍历XML文件的时候,要注意的一个问题就是编码的问题,如果xml文件的encoding为"utf-8",那么xml文件的文件编码也必须是utf-8,可以通过文本编辑器将文件另存为和xml的encoding相同的文件编码即可。否则在遍历的时候会报错或者出现乱码。

  2.生成XML文件

    在生成XML文件的时候,是通过DOMDocument类中的方法来创建各个节点和节点内容的。我通过查询数据库,并将数据库中的信息生成XML文件方法如下:

 include "database.php";       //导入连接数据库文件
$query = mysql_query("SELECT * FROM test"); //操作xml准备
$doc = new DOMDocument("1.0","utf-8"); //通过createElement方法为xml文件创建节点
//创建根节点
$school= $doc->createElement("school");
//通过appendChild方法将节点或属性添加到指定的标签下
//将根节点添加到xml文件中
$doc->appendChild($school); //创建student节点
$student= $doc->createElement("student");
//将student节点添加到school节点下
$school->appendChild($student); $nameinfo = array(); //对应xml文件中name标签下的内容
$sexinfo = array(); //对应xml文件中sex标签下的内容
$ageinfo = array(); //对应xml文件中age标签下的内容
$idinfo = array(); //对应xml文件中属性id的值
$i = 0; //控制变量i while($row=mysql_fetch_array($query)){
//通过createTextNode方法为标签节点赋值或者为属性赋值
//查询数据库信息并赋值给相应的数组
$nameinfo[$i] = $doc->createTextNode($row["name"]);
$sexinfo[$i] = $doc->createTextNode($row["sex"]);
$ageinfo[$i] = $doc->createTextNode($row["age"]);
$idinfo[$i] = $doc->createTextNode($i);
$i++;
} for($i=0;$i<count($nameinfo);$i++){
$name = $doc->createElement("name");
$sex = $doc->createElement("sex");
$age = $doc->createElement("age");
//通过createAttribute为节点标签创建属性
$id = $doc->createAttribute("id"); //将name、sex、age标签添加到student标签下,并且为student标签赋属性id
$student->appendChild($name);
$student->appendChild($sex);
$student->appendChild($age);
$student->appendChild($id); //将从数据库中取出的值添加到对应的标签下
$name->appendChild($nameinfo[$i]);
$sex->appendChild($sexinfo[$i]);
$age->appendChild($ageinfo[$i]);
$id->appendChild($idinfo[$i]);
} //通过save方法将生成的xml文件保存
$doc->save("test.xml");

  注意:在生成XML文件的时候同样应该注意编码问题,除了XML文件编码和XML指定编码应当一致以外,在连接数据库的时候还应该注意XML指定的编码应该和数据库的编码一致,另外在生成XML文件的时候应当特别注意各级标签的从属关系。

  3.XML文件的修改和删除

    在对XML文件中的数据进行修改和删除的时候,首先还是应该要将操作的XML引入,方法同遍历时一样。在修改或者删除时通过标签的属性及其值进行定位,方法如下:

 $doc= new DOMDocument();
$doc->load("test.xml"); //通过getElementsByTagName方法获取到所有标签为student的标签内容,并存为数组$students
$students = $doc->getElementsByTagName("student"); //遍历$students,将每个student的信息存为$student
foreach($students as $student){
//通过getAttribute获取指定属性的值
//将id为2的student标签的name修改为kenticny
if($student->getAttribute("id")==2){
$content = $doc->getElementsByTagName("name")->item(0)->nodeValue = "Kenticny";
}
//将id为1的student标签内容删除
if($student->getAttribute("id")==1){
//通过removeChild方法移除指定的标签内容
//在移除标签内容时候要通过被移除标签的父标签进行操作,获取父标签通过parentNode进行获取
$student->parentNode->removeChild($student);
} }
//保存修改的XML文件
$doc->save("test.xml");

  注意:在对XML进行修改和删除的时候,需要注意的是,修改和删除都是要通过指定标签的属性进行定位操作,然后在删除时候注意应当使用被删除标签的父标签进行删除操作。

  

  以上是我对于PHP通过DOMDocument方法操作XML文件的学习笔记。欢迎转载----转载请注明出处 BY 津志伊恋 2012年4月24日

PHP操作XML文件学习笔记的更多相关文章

  1. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  2. 利用XmlDocument操作XML文件

    利用XmlDocument可以方便的操作XML文件. .操作XML文件基本方法 ()添加对System.Xml的引用,并使用using语句添加引用: ()假设要读取的XML文件如下: <?xml ...

  3. Qt之QDomDocument操作xml文件-模拟ini文件存储

    一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...

  4. JAVA中通过Jaxp操作XML文件基础

    Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...

  5. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  6. Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...

  7. python第三方库——xlrd和xlwt操作Excel文件学习

    python第三方库——xlrd和xlwt操作Excel文件学习 1安装: C:\Users\Lenovo>pip install xlwtCollecting xlwt  Downloadin ...

  8. C#操作xml文件:使用XmlDocument 实现读取和写入

    XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...

  9. C#基础知识---Linq操作XML文件

    概述 Linq也就是Language Integrated Query的缩写,即语言集成查询,是微软在.Net 3.5中提出的一项新技术. Linq主要包含4个组件---Linq to Objects ...

随机推荐

  1. Java EE (6) -- Java EE 5 Enterprise Architect Certified Master

    Section 1: Application Design Concepts and Principles Explain the main advantages of an object-orien ...

  2. 重新想象 Windows 8 Store Apps (12) - 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示

    原文:重新想象 Windows 8 Store Apps (12) - 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示 [源码下载] 重新想象 Windows 8 Store Ap ...

  3. Word文件交换的电脑打开字体、排版变化的原因和解决方法!

    方案: 有时候.我们好不easy用Word写好文档,做好排版发给别人,别人会告诉你格式怎么是乱的啊,标题.正文.页眉页脚什么的格式都变了. 想尽各种办法都没能得到解决,那么出现这样的情况的原因究竟是什 ...

  4. FileUpload类别FileUpload1.FileName和FileUpload1.PostedFile.FileName差异

    FileUpload1.FileName 用来获取client上使用 FileUpload 控件上载的文件的名称.此属性返回的文件名称不包括此文件在client上的路径. FileUpload1.Po ...

  5. not accessible due to restriction on required library

    The type AWTUtilities is not accessible due to restriction on required library D:\Program Files\jdk1 ...

  6. 微软中国裁员曝光:在CD结束后!薪酬不变!

    聚众抗议的前诺基亚员工(腾讯科技配图) 腾讯科技 郭晓峰 腾讯科技刚刚获取了一份微软设备事业部中国区管理团队4日晚间发给被裁员工的补偿方案邮件. 邮件内容显示,微软承诺在收购诺基亚交易结束(2014年 ...

  7. Lua 脚本语法说明(转)

    Lua脚本语法说明(增加lua5.1部份特性) Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了.估计看完了,就懂得 ...

  8. MY WAY程序(十三) 理念和技术

    背部,该项目团队去了一半多,我们出差.我将离开之前,闪亮强哥给了我学习技术的列表,以了解它:AngularJs,bootsrap,smartadmin,html5,css3.很多前景的技术.哎,学吧, ...

  9. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  10. hdu3790最短路径问题

    题意是这种,给你一个无向图, 每条边有距离和花费, 假设从第一个点到末点的最短路不唯一, 则输出最短路长度以及最少的花费. 否则输出长度和花费即可. 用传说中的链式向前星优化了一下边的存储, 写了个s ...