xml之phpdom操作
php xml编程
XML解析技术介绍
1.php与DOM
2.PHP与XPath
3.SimpleXML
DOM(document object model)文档对象模型
把一个文件看做一个对象模型,通过对象的方式来操作各个节点
元素节点 属性节点 文本节点
要求:对xml文件进行CRUD操作 create read update delete 增删改查
@查找节点元素
1.//创建DOMDocument对象
$docxml=new DOMDocument();
2.加载指定的xml文件,在内存形成DOM树
$docxml->load('class.xml');
3.查询目标节点进行操作
$node=$docxml->getElementsByTagName('student'); 所有DOMNodeList 节点列表
返回所有节点为class的节点类型(DOMNodelList) 节点对象
var_dump($node);
DOMNodelList节点具有length属性 有几个节点
$node->length;
4.遍历取出需要的学生节点
item()方法
for($i=0;$i<$node->length;$i++){
$stu=$node->item($i);
getNodeVal($stu,'name');
}
5.取出需要的元素
取出第几个节点元素
$stu=$node->item(0);
取出名字
$stuname=$stu->getElementsByTagName('name');
echo $stuname->item(0)->nodeValue;
函数简化取值操作
function getNodeVal(&$MyNode,$tagName){
return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue;
}
$docxml=new DOMDocument();
$docxml->load('class.xml');
function getNodeVal(&$MyNode,$tagName){
return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue;
}
echo getNodeVal($docxml,'age');
@ 创建元素节点
<?php
//1.创建xmldoc对象
$docxml=new DOMDocument();
//2.加载xml文件
$docxml->load('class.xml');
//3.取挂在根节点
$root=$docxml->getElementsByTagName('class')->item(0); 如果不加item(0) 则为 DOMNodeList节点类型 加上item(0) 为DOMElement类型对象
//4.创建节点
$stu_node=$docxml->createElement('student');
$stu_node_name=$docxml->createElement('name');
$stu_node_name->nodeValue='liming'; 类型 DOMElement extends DOMNode
//挂在节点构建DOM树
$stu_node->appendChild($stu_node_name);
$stu_node_age=$docxml->createElement('age');
$stu_node_age->nodeValue='25';
$stu_node->appendChild($stu_node_age);
//5.挂在到根节点下
$root->appendChild($stu_node);
添加属性
$stu_node->setAttribute("sex","boy");
删除属性
$stu_node->removeAttribute("sex");
此时都在内存中运行没有保存到xml中,所以需要保存到xml中
6.$xmldoc->save("class.xml"); 把树回写到xml中
?>
如果save到源文件 相当于对文件添加更新,如果save是新的文件名,则保存到新文件里(包括旧文件里的内容)
@删除节点元素
找到要删除的节点 用父节点删除此节点
1. $stu=$docxml->getELementsByTagName("stu");
$stu1=$stu->item(2);
2.$stu1->parentNode->removeChild($stu1);
3.更新xml文件
$docxml->save("class.xml");
@ 更新节点
把第一个学生年龄+10
1.找到学生
$stu=$docxml->getELementsByTagName("stu");
$stu1=$stu->item(0);
2.$stu_age=$stu1->getElementsByTagName("age")->item(0)
因为不知道有几个年龄元素 所以需要item取出
3.$stu_age->nodeValue+=10;
4.更新xml文件
Xpath技术的使用价值
dom操作需要一层一层的查找
dom操作可以实现跨层查找,但不能保持层次关系,所以使用xpath技术,实现跨层次并且 层次关系清楚
XPath(XML Path Language)是一种标示节点位置的语言,可以用来描述XML元素的位置,如同硬盘资料夹的档案路径
XPath可以指出XML元素在xml文件中的位置,即树状结构的节点位置
核心思想:
通过xpath迅速定位你想查找的节点
PHP程序在载入xml文件建立DOMDocument对象后,就可以建立DOMXPath对象
//1.创建xmldoc对象
$docxml=new DOMDocument();
//2.加载xml文件
$docxml->load('class.xml');
//3.创建xpath对象
$xpath=new DOMXPath($docxml);
//4.使用query()方法找出XPath位置路径表达式的节点对象
$items=$xpath->query("/bb/cc");
返回DOMNodeList对象集合,无则返回空
xml之phpdom操作的更多相关文章
- Linq对XML的简单操作
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- SQL Server对Xml字段的操作
T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...
- XML转换为对象操作类详解
//XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...
- 更新java对xml文件的操作
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
- (转)SQL对Xml字段的操作
T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...
- SQL对Xml字段的操作
转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...
- dom4j解析XML的CURD操作
在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
- XML文档操作之JAXP下实现
JAXP是java API for xml PRocessing的缩写. 其API可以在javax.xml.parsers 这个包中找到.这个包向用户提供了两个最重要的工厂类,SAXParserFac ...
随机推荐
- DevExpress MessageBox 弹出框 底层类
效果图: 前台调用: //图一的前台调用 MessageBox.Show("测试", "标题", MessageBoxButtons.OK); //图二的前台调 ...
- 实现GetHashCode时要遵循的规则
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:实现GetHashCode时要遵循的规则.
- Dom4J对XML的创建、修改、删除等操作
Dom4j也可以很方便完成XML文档的创建.元素的修改.文档的查询遍历等,但dom4j稍比jdom复杂一点,不过在大片文档的情况下dom4j的性能要不jdom好. # 准备 首先,提供相关的jar包 ...
- Android 入门第一课 一个简单的提示框
1.打开Android开发环境Eclipse来到主界面 2.新建一个安卓项目 File->New->Android Application project 在上面有红色错误的地方填上应用程 ...
- Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置
目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号 ...
- yum 命令提示语法错误
1. 问题信息 SyntaxError: invalid syntax 2. 问题原因 升级python版本导致 3. 解决方法 vi /usr/bin/yum 将#!/usr/bin/python ...
- iOS之KVO和KVC
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...
- verilog中的task用法
任务就是一段封装在“task-endtask”之间的程序.任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的.调用某个任务时可能需要 ...
- Activity 的生命周期与加载模式
当Activity 处于Android 应用中运行时,它的活动状态由 Android 以 Activity 栈的形式管理.当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都 ...
- 结合Retrofit,RxJava,Okhttp,FastJson的网络框架RRO
Retrofit以其灵活的调用形式, 强大的扩展性著称. 随着RxAndroid的推出, Retrofit这样的可插拔式的网络框架因其可以灵活兼容各种数据解析器, 回调形式(主要还是RxJava啦)而 ...