DOM

document object model,文档对象模型,就是树形结构

节点的分类

  1. 元素节点
  2. 属性节点
  3. 值节点
  4. 注释节点
  5. 根节点(document才是根节点)

生成XML文档 xml的根节点为document节点

如果book下只有一个节点元素可以用此操作取得结点元素的值

/***********************************************************/

<?php // 将数组格式变换为xml格式的文档输入  
$array=array(array('name'=>'PHP','type'=>'脚本语言'),array('name'=>'XML','type'=>'标记语言'),array('name'=>'C#','type'=>'动态语言'));

$doc=new DOMDocument('1.0','utf-8'); //设置版本号和字符编码
$doc->formatOutput=true; //格式化输出 一般不用 这样降低效率

$books=$doc->createElement('books'); //创建一个元素节点
foreach($array as $value)
{
$book=$doc->createElement('book');//创建book节点 
$name=$doc->createElement('name', $value['name']); //创建name节点,并赋值
$book->appendChild($book); //在元素的最后面添加子元素
$book->appendChild($name);
$book->setAttribute('type',$value['type']);
}
$doc->appendChild($books);
$doc->save('books.xml');
echo '写入成功';

/***********************************************************/

if($_POST){//对已有的xml文档进行添加操作
$doc=new DOMDocument();//不需要字符集和版本,因为已经存在
$doc->preserveWhiteSpace=false;//去掉空格元素的影响
$doc->formatOutput=true;//格式化输出
$path='./books.xml';//将文件路径变为变量,以后好修改
$doc->load($path);//对xml文档加载
$book=$doc->createElement('book');//创建book节点
$name=$doc->createElement('name',$_POST['name']);//创建name节点
$price=$doc->createElement('price',$_POST['price']);//创建price节点
$book->appendChild($name);//改变xml中包含的顺序
$book->appendChild($price);
$book->setAttribute('type', $_POST['type']);//设置book节点的属性
$books=$doc->documentElement;//创建books节点
$books->appendChild($book);//
if($doc->save($path))//保存xml文档到硬盘
{
header('location:books_admin.php');
}
else
{
echo '添加失败';
}
}

/***********************************************************/

//删除节点

<input type="button" value="删除" onclick="if(confirm('确定要删除吗'))location.href='books_del.php?index=<?php echo $i?>'"

//传入要删除的下标 通过get方式

$doc=new DOMDocument();
$doc->preserveWhiteSpace=false;
$doc->formatOutput=true;
$doc->load('books.xml');
$index=$_GET['index'];
$book=$doc->getElementsByTagName('book')->item($index);
$book->parentNode->removeChild($book);
$doc->save('books.xml');
header('location:books_admin.php');

/***********************************************************/

修改

<input type="button" value="修改" onclick="location.href='books_modify.php?index=<?php echo $i?>'"

$index=$_GET['index'];
if(!is_numeric($index))//确认是否存在
die('非法操作');
$doc=new DOMDocument();
$doc->preserveWhiteSpace=false;
$path='./books.xml';
$doc->load($path);
$oldbook=$doc->getElementsByTagName('book')->item($index);
if($_POST){
$newbook=$doc->createElement('book');
$name=$doc->createElement('name',$_POST['name']);
$price=$doc->createElement('price',$_POST['price']);
$newbook->setAttribute('type', $_POST['type']);
$newbook->appendChild($name);
$newbook->appendChild($price);

$root=$doc->documentElement->replaceChild($newbook, $oldbook); //替换节点
$doc->save($path);
header('location:books_admin.php');
}
?>

/***********************************************************/

递归遍历xml

值节点的名称是“#text”,根节点的名称是“#document”

<?php

//递归XML文档  适合xml通用操作,但是消耗资源

function getChilds($node){

echo "<ul>";

if($node->nodeType==3){

echo "<li>".$node->nodeValue."</li>";   //取出节点的值

}

else

{

echo "<li>".$node->nodeName."</li>";    //取出元素节点的名称

if($node->attributes->length>0) //节点的属性的个数大于0,表示此节点有属性

{

foreach ($node->attributes as $attr){

echo "<li>".$attr->value."</li>";   //取出节点的值

}

}

foreach($node->childNodes as $child){   //便利循环子元素

getChilds($child);   //递归点

}

}

echo "</ul>";

}

$doc=new DOMDocument();

$doc->preserveWhiteSpace=false;  //不保护空格,就是导入XML的时候去掉空白字符

$doc->load('books.xml');

$root=$doc->documentElement;    //获得最顶层元素

getChilds($root);

PHP简单读取XML的更多相关文章

  1. 释放SQL Server占用的内存 .Net 读取xml UrlReWriter 在web.config中简单的配置

    释放SQL Server占用的内存   由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多 ...

  2. 关于如何读取XML文件的一个简单方法

    在平时开发系统功能的时候,我们经常会碰到一些需求需要经常性的发生变化,比如 系统版本.更新日志 等等.这个时候用一个XML文件来替代数据库,就会变的简便很多. 前段时候我也正好需要改个需求,是关于客户 ...

  3. xml文件简单读取,循环遍历

    xml文件的简单读取出来生成dom4j.Document对象树,循环遍历获取节点 例子: import java.util.Iterator; import org.dom4j.Document; i ...

  4. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

  5. C#中常用的读取xml的几种方法(转)

    本文完全来源于http://blog.csdn.net/tiemufeng1122/article/details/6723764,仅作个人学习之用. XML文件是一种常用的文件格式,例如WinFor ...

  6. PHP读取XML

    books.xml文件: 代码 <books> <book> <author>Jack Herrington</author> <title> ...

  7. 在C#中创建和读取XML文件

    1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...

  8. Java获取路径方法&相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

  9. C#读取Xml【转】

      XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...

随机推荐

  1. python format函数的使用

    转载自:http://www.cnblogs.com/kaituorensheng/p/5709970.html python自2.6后,新增了一种格式化字符串函数str.format(),威力十足, ...

  2. python re模块常用的正则表达式

    '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r&qu ...

  3. hibernate.Criteria分页排序模糊查询

    org.hibernate.Criteria criteria = simpleDAO.getSession().createCriteria(Event.class); Criterion c = ...

  4. 2019牛客多校第五场B-generator 1(矩阵快速幂)

    generator 1 题目传送门 解题思路 矩阵快速幂.只是平时的矩阵快速幂是二进制的,这题要用十进制的快速幂. 代码如下 #include <bits/stdc++.h> #defin ...

  5. NIO浅析(二)

    一:前言 在(一中了解了NIO中的缓冲区和通道),通过本文章你会了解阻塞和非阻塞,选择器,管道 二:完成NIO通信的三要素 * 1.通道(Channel):负责连接* java.nio.channel ...

  6. Opengl ES Glew库 ----- By YDD的铁皮锅

    前一篇随笔我写了Opengl的窗口创建,这一篇随笔我要写OpenGL glew库的使用.首先需要引入头文件h,库文件Lib和动态链接库DLL, 百度搜索OpenGL glew库找到这个纯英文网站,尽量 ...

  7. 从输入url到显示网页,发生了那些事情?

    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等. 本文将更深入的研究当你输入一个网址 ...

  8. Tomcat启动脚本(1)startup.bat

    @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...

  9. Clairewd's message /// 字符串hash

    题目大意: 给定字符串s 是26个字母对应的密文字母 给定字符串c1 是 密文+部分原文 原文可能缺损 要求将原文补全输出 利用s得到密文字母对应的原字母rs 利用rs翻译c1得到 原文+部分密文c2 ...

  10. go build报错cannot find package

    go env 关键数据是这样的 GOPATH="/home/zzy/goProject" GOROOT="/usr/local/go" 项目目录是这样的 goP ...