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

 更新时间:2013年05月10日 17:16:57   作者:  
本篇文章是对在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&quot;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/>';
}

相关文章

  • PHP保存带BOM文件的方法

    PHP保存带BOM文件的方法

    这篇文章主要介绍了PHP保存带BOM文件的方法,本文相当简短,因为方法也很简单,不需要过多描述,需要的朋友可以参考下
    2015-02-02
  • 记录mysql性能查询过程的使用方法

    记录mysql性能查询过程的使用方法

    本篇文章介绍了,记录mysql性能查询过程的使用方法。需要的朋友参考下
    2013-05-05
  • phpstudy本地环境搭建超详细图文教程

    phpstudy本地环境搭建超详细图文教程

    这篇文章主要给大家介绍了关于phpstudy本地环境搭建超详细图文教程的相关资料,phpStudy是集安全、高效、功能于一体且完全免费的一键服务器环境搭建软件,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • PHPCMS2008广告模板SQL注入漏洞修复

    PHPCMS2008广告模板SQL注入漏洞修复

    PHPCMS2008由于广告模块取referer不严,导致一处sql注入漏洞.这篇文章主要介绍了PHPCMS2008广告模板SQL注入漏洞的相关资料,需要的朋友可以参考下
    2016-10-10
  • PHP+swoole实现简单多人在线聊天群发

    PHP+swoole实现简单多人在线聊天群发

    这篇文章主要介绍了PHP+swoole实现简单多人在线聊天群发 的相关资料,需要的朋友可以参考下
    2016-01-01
  • Laravel中unique和exists验证规则的优化详解

    Laravel中unique和exists验证规则的优化详解

    这篇文章主要给大家介绍了关于Laravel中unique和exists验证规则的优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • 利用switch语句进行多选一判断的实例代码

    利用switch语句进行多选一判断的实例代码

    下面小编就为大家带来一篇利用switch语句进行多选一判断的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • main.php

    main.php

    main.php...
    2006-12-12
  • Laravel5.1 框架响应基本用法实例分析

    Laravel5.1 框架响应基本用法实例分析

    这篇文章主要介绍了Laravel5.1 框架响应基本用法,结合实例形式分析了laravel5.1框架基本响应、自定义响应头、返回值、重定向等相关使用技巧,需要的朋友可以参考下
    2020-01-01
  • PHP使用ActiveMQ实例

    PHP使用ActiveMQ实例

    本篇文章是一篇关于PHP使用ActiveMQ的实例,我们分享了实例代码,并做了相关要点的解释,需要的朋友参考下吧。
    2018-02-02

最新评论