欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自定义php类(查找/修改)xml文档

程序员文章站 2022-04-19 22:25:50
近期在看php的教学视频,其中讲到了 php 操作 xml 文档,学了点儿 domdocument 类。自己查手册又全英文,看不大懂。但还是自己写了个类,实现了查找 xml...
近期在看php的教学视频,其中讲到了 php 操作 xml 文档,学了点儿 domdocument 类。自己查手册又全英文,看不大懂。但还是自己写了个类,实现了查找 xml 节点,并修改节点值。背景解说完毕,且看代码如下:
复制代码 代码如下:

/*
<?xml version="1.0" encoding="utf-8"?>
<班级>
<学生 number="101">
<名字>孙悟空</名字>
<名字>孙行者</名字>
<年龄>猴精猴精</年龄>
<介绍></介绍>
</学生>
<学生 number="102">
<名字>白骨精</名字>
<年龄>140</年龄>
<介绍>幻化万千</介绍>
</学生>
<学生 number="103">
<名字>猪八戒</名字>
<名字>猪无能</名字>
<年龄>200</年龄>
<介绍>能吃会睡</介绍>
</学生>
</班级>
*/
class xmldom{
public $version;
public $encoding;
private $xml;
private $items;
private $seachnode = '';
private $seachitem = '';
private $seachvalue = '';
public $writebytes = 0;
function __construct($xmlfile ='', $version ='1.0', $encoding = 'utf-8'){
$this->version = $version;
$this->encoding = $encoding;
$this->xml = new domdocument($version, $encoding);
if($xmlfile)$this->xml->load($xmlfile);
}
function getrootele($roottag){
$this->xmlroot = $this->xml->getelementsbytagname($roottag)->item(0);
}
function getseachitem($itemstag, $seachnode, $seachvalue){
$this->items = $this->xml->getelementsbytagname($itemstag);
$this->items->length;
for($i=0; $i<$this->items->length; $i++){
$item = $this->items->item($i);//元素
$node = $item->getelementsbytagname($seachnode);//节点
for($j = 0; $j< $node->length; $j++){
$subnode = $node->item($j);
if($seachvalue == $subnode->nodevalue){
$this->seachnode = $subnode;
$this->seachitem = $item;
$this->seachvalue = $subnode->nodevalue;
break(2);
}
}
}
return ($this->seachnode) ? true : false;
}
function update($nodevalue, $nodetag = '',$append = false, $index = 0){
if($append){
if($nodetag)
$this->seachitem->getelementsbytagname($nodetag)->item($index)->nodevalue += $nodevalue;
else
$this->seachnode->nodevalue += $nodevalue;
}else{
if($nodetag)
$this->seachitem->getelementsbytagname($nodetag)->item($index)->nodevalue = $nodevalue;
else
$this->seachnode->nodevalue = $nodevalue;
}
}
function save($filename){
$this->writebytes = $this->xml->save($filename);
return ($this->writebytes) ? true : false;
}
}
$test = new xmldom('student.xml');
$test->getseachitem('学生','年龄','103');//找到 年龄=103 的猪八戒
$test->update('小猪猪', '名字', false, 1); //把猪八戒的第二个名字改成:小猪猪
$test->save('new.xml'); //保存成新文件