您的位置:首页 > 编程语言 > PHP开发

PHP之XML

2016-05-07 10:25 525 查看
xml跟html一样属于dom结构,存在节点

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');


源文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php xml