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操作的更多相关文章

  1. Linq对XML的简单操作

    前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...

  2. SQL Server对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  3. XML转换为对象操作类详解

    //XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...

  4. 更新java对xml文件的操作

    //更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...

  5. (转)SQL对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  6. SQL对Xml字段的操作

    转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...

  7. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  8. 实现动态的XML文件读写操作

    实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...

  9. XML文档操作之JAXP下实现

    JAXP是java API for xml PRocessing的缩写. 其API可以在javax.xml.parsers 这个包中找到.这个包向用户提供了两个最重要的工厂类,SAXParserFac ...

随机推荐

  1. Maven管理项目架包

    最近一直在用Maven管理项目的架包,从而发现了几个不错的官方或者非官方的网站. http://mvnrepository.com/artifact/com.ning  这个是我刚刚用来找HTTP开发 ...

  2. java 实现视频转换通用工具类:获取视频元数据信息(一)

    java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box. 注:由于平时都没有时间写博客,所以思路我就不写了,有问题问我,不一定马上回复. 详细介绍: ffmpeg:ht ...

  3. SQL rank() 用法

    WITH vep AS ( SELECT package.OrderCode , RANK() OVER ( PARTITION BY package.OrderCode ORDER BY packa ...

  4. android照片墙的实现

    转载自 http://blog.csdn.net/guolin_blog/article/details/9526203 由于每个android应用程序都有内存限制,所以如果加载很多图片的话,一定会出 ...

  5. 赵雅智:js知识点汇总

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  6. Lua开发环境搭建(Mac)

    1.下载最新版的Lua,点击下载 2.下载完成后,解压压缩包,打开终端,cd进入Lua解压目录下 3. 在终端输入“make macosx”,编译lua 4.编译完成后,在终端输入”make test ...

  7. Android5.0之NavigationView的使用

    导航菜单的制作方式多种多样,网上也有各种炫酷效果的具体实现方式,那么今天我主要是想来说说Google在Android5.0之后推出的NavigationView的具体使用方式. NavigationV ...

  8. 关于Java安全的书

    关于Java安全的书http://automationqa.com/forum.php?mod=viewthread&tid=2831&fromuid=21

  9. Oracle 流式制造功能培训

    转自百度文库: http://wenku.baidu.com/link?url=dRyll_P7C3fepoUp5dggYVzw6lVmifwEJMLvis1CN58m09WYF1unY3Ddn9Lq ...

  10. mysql2csv 和 csv2mysql 工具

    mysql2csv 和 csv2mysql 工具 在这里提供了两个使用 .csv 格式 的简单的 MySQL 数据库的导数据工具.csv 格式可以很容易地生成和解析,而且,也可以很容易地使用办公软件把 ...