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 ...
随机推荐
- 换种眼光看Spring之bean是怎么诞生的(一)
Java的世界里处处存在了对象,有时候换一种眼光往往会给自己带来与之前大不一样的理解. 一个对象的出现离不开字节码,拿classforname来讲,classforname("...&quo ...
- 免费安卓IOS测试API接口,后续会陆续增加接口
各位博友好!开发的安卓或者ios的朋友们,经常会遇到想测试但是没有公开的api接口进行进行测试.但自己又不会开发服务端或者没有服务器,这里我免费提供了一整套API接口.欢迎大家调用,目标是方便大家. ...
- Android-怎样用命令行进行打包
转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/40978859 1.生成R文件 aapt package -f -m -J . ...
- 使用ThinkPHP框架高速开发站点(多图)
使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...
- Awake和Start
经过查阅资料和自己的理解整理出来的,欢迎大家指教. Awake和Start对比 awake比start先执行. 当有多个类的时候,所有类的awake执行完了才会执行start. awake里面一般放初 ...
- QT运行时加载UI文件
写QT程序里运行时加载UI文件,代码如下: 点击(此处)折叠或打开 #include "keyboard.h" #include <QtUiTools> #incl ...
- QT线程(一):线程类
线程之间共享数据,但又单独执行: QT线程QThread是平台无关的: 通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread: 1.线程优先级 总共8个优先级:线程 ...
- 如何测试mysql是否安装成功
1.命令行:net start mysql如果能启动,那说明安装成功了.如果想查询默认的数据库,你可以用mysqlfont,或者直接命令行操作进入安装目录下的bin文件夹,或者配置好环境变量,然后2. ...
- TCP/IP协议原理与应用笔记14:电路交换 和 分组交换
1. 电路交换: (1)建立连接 (2)数据传输 (3)拆除连接 2. 分组交换 (1)数据报: 根据网络的特性,将数据报分成不同大小的部分,经过不同网路传递到相同的目的地.如下: 这里A--X 和 ...
- arcmap10如果判断一个面是否含洞
使用字段计算器,使用python !Shape.isMultipart!结果为true就是,false不是