PHP之XML
2016-05-07 10:25
525 查看
xml跟html一样属于dom结构,存在节点
php操作xml就跟javascript操作html结构一样
获取xmlDOm结构
对XML结构进行增删改查
保存文件
load()接收两个参数:
第一个参数是文件名;第二个参数是libxml选项常量,传递LIBXML_NOBLANKS可以忽略空白点。或者在加载前使用preserveWhiteSpace忽略空白。
创建simpleXMLElement对象
源文件
php操作xml就跟javascript操作html结构一样
php操作xml常规操作是:
加载或者创建xml文件获取xmlDOm结构
对XML结构进行增删改查
保存文件
//创建xml文档 <?php $book = array( array('name'=>'php','type'=>'web'), array('name'=>'java','type'=>'web'), array('name'=>'html','type'=>'client') ); //创建xml文档对象 $dom = new domdocument('1.0','utf-8'); $dom->formatOutput = true; //创建节点 $books = $dom->createElement('books'); foreach($book as $k=>$v){ $book = $dom->createElement('book'); $name = $dom->createElement('name',$v['name']); //添加子节点 $books->appendChild($book); $book->appendChild($name); //添加属性 $book->setAttribute('type',$v['type']); } $dom->appendChild($books); //保存xml文件 $dom->save('save.xml'); echo 'save succ';
//创建成功 <?xml version="1.0" encoding="utf-8"?> <books> <book type="web"> <name>php</name> </book> <book type="web"> <name>java</name> </book> <book type="client"> <name>html</name> </book> </books>
//简单获取xml <?php $dom = new DOMDocument(); //加载xml文件 $dom->load('save.xml'); //获取元素节点 $res = $dom->getElementsByTagName('book'); for($i=0;$i<$res->length;$i++){ echo $res->item($i)->getElementsByTagName('name')->item(0)->nodeValue; }
load()接收两个参数:
第一个参数是文件名;第二个参数是libxml选项常量,传递LIBXML_NOBLANKS可以忽略空白点。或者在加载前使用preserveWhiteSpace忽略空白。
//递归获取xml元素名称与值 <?php $dom = new domdocument(); $dom->preserveWhiteSpace=false; $dom->load('save.xml'); $root = $dom->documentElement; tree($root); function tree($root){ echo "<ul>"; if($root->nodeType==3){ echo "<li>"; echo $root->nodeValue; echo "</li>"; }else{ echo "<li>"; echo $root->nodeName; echo "</li>"; //判断是否存在属性 if($root->attributes->length>0){ foreach($root->attributes as $attr){ echo "<li>"; //获取属性值 echo $attr->value; echo "</li>"; } } foreach($root->childNodes as $child){ tree($child); } } echo "</ul>"; }
xPath
通过dom结构定位节点,在数据量很大的情况下速度下降的很快,使用xpath快速定位节点<?php $dom = new domdocument(); $dom->preservewhitespace = false; $dom->load('save.xml'); $xpath = new domxpath($dom); //根据路径查找 $path = '/books/book/name'; res($path,$xpath); //路径基础上增加属性过滤 @type <>= val $path = "/books/book[@type='client']/name"; res($path,$xpath); //路径基础上增加位置选择 索引从0开始,位置从1开始 $path = "/books/book[position()=2]/name"; res($path,$xpath); //路径基础上选择最后一个位置 $path = "/books/book[last()]/name"; function res($path,$xpath){ $res = $xpath->query($path); foreach($res as $node){ echo $node->nodeValue,'<br/>'; } echo '<hr>'; }
simpleXML
这是PHP5以后新增对xml文档的操作,相对于其它语言(java、C++)的独特特点,可以将XML的DOM结构转换为对象和数组来进行操作。创建simpleXMLElement对象
//1 $sim = simplexml_load_file('save.xml'); //2 $xml = file_get_contents('save.xml'); $sim = new simplexmlelement($xml); //3 $sim = simplexml_load_string($xml);
<?php $xml = file_get_contents('save.xml'); $sim = new simplexmlelement($xml); echo '<pre>'; var_dump($sim);
var_dump($sim->book); foreach($sim->book as $book){ $attr = $book->attributes(); echo $attr->type; echo '-'; echo $book->name; echo '</br>'; }
//添加节点 //返回一个simpleXML对象 $book = $sim->addChild('book'); $book->addChild('name','node'); $book->addAttribute('type','web'); $sim->saveXML('save.xml');
//更新节点 $length = count($sim->book); $sim->book[$length-1]->name.='.js'; $sim->saveXML('save.xml');
//删除节点 for($i=count($sim->book)-1;$i>=0;$i--){ $book = $sim->book[$i]; $attr = $book->attributes(); if($attr->type=='web'){ unset($sim->book[$i]); } } $sim->saveXML('save.xml');
源文件
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- XML 与 JSON 优劣对比
- Php Installing An Expansion
- php7 读取php.ini[4]
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- 实例解析Ruby程序中调用REXML来解析XML格式数据的用法
- Ruby中XML格式数据处理库REXML的使用方法指南
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充