当前位置:首页 > PHP教程 > PHP常见问题

解析php DOMElement 操作xml 文档的实现代码

复制代码 代码如下:

/*<?xml version="1.0" encoding="utf-8" standalone="no"?>
 <!-- css的样式定义,不加点。如:name{color:red;} -->
<?xml-stylesheet type="text/css" href="css.css"?>
<!-- 引入dtd文档定义文件 (根元素:班级)<!doctype 班级 system "class.dtd" /> -->
<!-- <!doctype 班级[
<!element 班级 (学生+)>
<!element 学生 (名字,年龄,介绍)>
<!element 名字 (#pcdata)>
<!element 年龄 (#pcdata)>
<!element 介绍 (#pcdata)>
] /> -->
<班级>
<学生 number="101">
<名字>孙悟空</名字>
<名字>孙行者</名字>
<年龄>123</年龄>
<介绍><![cdata[&*$%特殊字串^&#$&]]></介绍>
</学生>

<学生 number="10"2">
<名字>白骨精</名字>
<年龄>140</年龄>
<介绍>介绍内容</介绍>
</学生>
</班级>
*/
$xmldoc = new domdocument('1.0', 'utf-8');
$xmldoc->load('datas.xml');

$itemsnodelist = $xmldoc->getelementsbytagname('学生');
$itemelement = $itemsnodelist->item(0);//得到第一个完整的学生信息节点
$itemchildsnodelist = $itemelement->getelementsbytagname('名字');//得到子节点“名字”,也许有多个名字
$itemchildnode = $itemchildsnodelist->item(0);//得到第一个名字节点
echo $itemchildnode->nodevalue;//输出节点值

//封装成函数
$nodearr = array('名字', '年龄', '介绍');
function getnodeval($xmldoc, $itemsname, $nodearr){
    $items = $xmldoc->getelementsbytagname($itemsname);
     for($i=0; $i < $items->length; $i++){
        $item = $items->item($i);
        foreach($nodearr as $node){
            $data[$i][] = $item->getelementsbytagname($node)->item(0)->nodevalue;
        }
    }
    return $data;
}

$data = getnodeval($xmldoc, '学生', $nodearr);
print_r($data);


复制代码 代码如下:

//添加节点
$xmldoc = new domdocument('1.0', 'utf-8');
$xmldoc->load('datas.xml');
$items = $xmldoc->getelementsbytagname('班级')->item(0);//根节点
$student =  $xmldoc->createelement('学生');//创建一个新的学生节点
$stu_name = $xmldoc->createelement('名字','张三');
$stu_age = $xmldoc->createelement('年龄','15');
$stu_intro = $xmldoc->createelement('介绍','动手能力强且成绩稳定');
$items->appendchild($student);
$student->appendchild($stu_name);
$student->appendchild($stu_age);
$student->appendchild($stu_intro);
$bytes = $xmldoc->save('datas.xml');
echo ($bytes)? "写入了: $bytes 字节" : '保存失败';

//删除节点
$xmldoc = new domdocument('1.0', 'utf-8');
$xmldoc->load('datas.xml');
$student = $xmldoc->getelementsbytagname('学生')->item(2);//直接找到要删除的节点
$student->parentnode->removechild($student);//父节点的删除方法
$xmldoc->save('datas.xml');

//修改节点值
$student = $xmldoc->getelementsbytagname('学生')->item(2);
$student->getelementsbytagname('年龄')->item(0)->nodevalue += 10;
$student->setattribute('id', '110');
$xmldoc->save('datas.xml');

//应用 xpath 查找节点

$xml = new domdocument('1.0', 'utf-8');
$xml->load('dat.xml');
$xpath = new domxpath($xml);
$nodelist = $xpath->query('/aaa/bbb/ddd/fff');
echo $nodelist->item(0)->nodevalue;

//simplexml 类操作 xml
/*
<?xml version="1.0" encoding="utf-8"?>
<books>
<book house="清华出版">
<code>1001</code>
<price>200元</price>
<author>大明</author>
<title>天龙八部</title>
</book>
<book house="北大出版">
<code>1002</code>
<price>321元</price>
<author>张三</author>
<title>笑傲江湖</title>
</book>
<book house="人 民出版">
<code>1004</code>
<price>182元</price>
<author>李四</author>
<title>读者</title>
</book>
</books>
*/
$xml = simplexml_load_file('books.xml');
$books = $xml->book;
echo $books[1]->title . $books[1]['house'];//直接指向第二本书
foreach($xml as $item){
    echo $item->title,' ',$item['house'],'<br/>';
}



【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!