dom技术解析xml (php)
1.xml实例
test.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 班级 SYSTEM "test.dtd">
<!--<!DOCTYPE 班级 [
<!Element 班级 (学生+)>
<!Element 学生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
]>-->
<班级>
<学生>
//在CDATA中可以嵌入任何内容,包括图片。
//在默认情况下,只要符合书写语法,浏览器不会去检验是否符合逻辑,我们需要自己写代码测试。
<!--<name>悟空"'<></name>
<![CDATA[<age>500><' ""</age>]]>-->
<name>悟空</name>
<age>500</age>
<sex>男</sex>
//人不可能有面积属性,不符合逻辑。
<面积>500</面积>
</学生>
<学生>
<name>白骨精</name>
<age>1000</age>
<sex>女</sex>
</学生>
</班级>
test.dtd
<!Element 班级 (学生+)>
<!Element 学生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
checkDtd.html
<html>
<head>
<title>测试dtd</title>
<meta http-equiv="content-type"content="text/html;charset=utf-8"/>
<script type="text/javascript">
//创建一个xml解析器
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
//开启校验功能
xmldoc.validateOnParse=true;
//指定对哪一个xml文件进行校验
xmldoc.load("test.xml");
//如有错误,则输出
document.write("错误信息"+xmldoc.parseError.reason+"<br/>");
document.write("错误信息="+xmldoc.parseError.line+"<br/>");
</script>
</head>
</html>
此检测dtd的方法只适用于IE浏览器,是IE浏览器特有的属性,其他浏览器不支持。
2.php技术操作xml文件
*php dom
*php结合xpath操作xml
*SimpleXml
//phpdom解析xml
test.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 班级 SYSTEM "test.dtd">
<!--<!DOCTYPE 班级 [
<!Element 班级 (学生+)>
<!Element 学生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
]>-->
<班级>
<学生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</学生>
<学生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</学生>
<学生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</学生>
</班级>
phpdom.php
<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
//指定要处理的xml文件,加载xml文件
$xmldoc->load("test.xml");
//希望获取每一个学生的名字
$students=$xmldoc->getElementsByTagName("学生");
echo $students->length;
for($i=0;$i<$students->length;$i++){
$node=$students->item($i);
echo getNodeValue($node,"name")."<br/>";
echo getNodeValue($node,"age")."<br/>";
echo getNodeValue($node,"sex")."<br/>";
}
//$node=$students->item(0);
/*$list=$node->getElementsByTagName("name");
$list1=$list->item(0)->nodeValue;
echo $list1;*/
//echo getNodeValue($node,"age");
function getNodeValue(&$node,$tagName){
return $node->getElementsByTagName($tagName)->item(0)->nodeValue;
}
?>
</html>
//增加节点的操作代码
addNode.php
<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
//指定要处理的xml文件,加载xml文件
$xmldoc->load("test.xml");
//希望获取每一个学生的名字
$root=$xmldoc->getElementsByTagName("班级")->item(0);
//创建一个学生节点
$name=$xmldoc->createElement("学生");
//创建一个名字节点
$name1=$xmldoc->createElement("name");
//给名字节点赋值
$name1->nodeValue="鑫鑫";
//把名字节点挂载到学生节点之下
$name->appendChild($name1);
//创建年龄节点
$name2=$xmldoc->createElement("age");
//给年龄节点赋值
$name2->nodeValue="25";
//将年龄节点挂载到学生节点之下
$name->appendChild($name2);
//创建性别节点
$name3=$xmldoc->createElement("sex");
//给性别节点赋值
$name3->nodeValue="男";
//将性别节点挂载到学生节点之下
$name->appendChild($name3);
//最后将学生节点挂载到根节点班级之下
$root->appendChild($name);
//回写入xml文件
$xmldoc->save("test.xml");
?>
</html>
//删除节点的操作
<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
$xmldoc->load("test.xml");
//获取根节点
$root=$xmldoc->getElementsByTagName("班级")->item(0);
//要删除第3个学生
//获取学生节点
$students=$xmldoc->getElementsByTagName("学生");
//获取第三个学生
$stu1=$students->item(0);
//删除第三个学生
//$root->removeChild($stu1);
$stu1->parentNode->removeChild($stu1);
$xmldoc->save("test.xml");
echo "删除成功";
?>
</html>
//更新节点内容的操作
<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
$xmldoc->load("test.xml");
//获取学生节点
$student=$xmldoc->getElementsByTagName("学生")->item(0);
//获取第三个学生
$stu_name=$student->getElementsByTagName("name")->item(0);
//更新文本的值
$stu_name->nodeValue+="八戒";
$xmldoc->save("test.xml");
echo "更新成功";
?>
</html>
与Java解析xml相比之下,利用PHP解析xml要简单一些,更容易让人理解。
今日暂时分享于此。明日继续。
革命尚未成功,同志仍需努力!
dom技术解析xml (php)的更多相关文章
- dom技术解析xml下jaxp解析器详细代码
1.使用jaxp实现查询操作 person.xml <?xml version="1.0" encoding="UTF-8" standalone=&qu ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- 用JAXP的dom方式解析XML文件
用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...
- Dom方式解析XML
public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...
- 用DOM方式解析XML
一.用DOM方式解析XML 此例子节点结构如下: 1.获取book节点属性 (1).如果不知道节点的属性,通过 NamedNodeMap attrs = book.getAttributes(); 来 ...
- 在iOS 开发中用GDataXML(DOM方式)解析xml文件
因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...
- python 之模块之 xml.dom.minidom解析xml
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...
- sax技术解析xml下jaxp解析器详细代码
*解析xml的两种技术dom和sax dom:根据xml的层级结构在内存中分配一个树形结构,把xml标签,属性,文本封装成对象. sax方式:事件驱动,边读边解析. 在javax.xml.parser ...
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...
随机推荐
- js实现图片延时加载的原理
实现原理: 附:(http://www.cnblogs.com/fishtreeyu/archive/2011/03/12/1982067.html) 把所有需要延时加载的图片改成如下的格式: < ...
- git push & git pull 推送/拉取分支
git push与git pull是一对推送/拉取分支的git命令. git push 使用本地的对应分支来更新对应的远程分支. $ git push <远程主机名> <本地分支名& ...
- 向jsp页面传值时出现乱码
在一个html页面中用表单向jsp页面传值: 这是html页面 <html> <head> <title>MyBeans.html</title> &l ...
- #学习笔记#e2e学习使用(一)
本文仅限于记录本人学习的过程,以及怎么踩的坑,是如何解决的.逻辑肯定是混乱的,有用之处会抽出共通另行发帖. 最终目标:要运用于Vue项目中,进行功能测试甚至自动化测试. 一.e2e概念 理解:end ...
- What is linux symbolic link
Question :What is linux symbolic link In computing, a symbolic link (also symlink or soft link) is a ...
- python:协程
1,如何实现在两个函数之间的切换? def func1(): print(l) yield print(3) yield def func2(): g =func1() next(g) print(2 ...
- python 3+djanjo 2.0.7简单学习(五)--Django投票应用
1.编写一个简单的表单 编写的投票详细页面的模板 ("votes/detail.html") ,让它包含一个 HTML <form> 元素: <!DOCTYPE ...
- IntelliJ IDEA 快速搭建 Spring MVC环境
IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的. ...
- (转)理解YOLOv2训练过程中输出参数含义
最近有人问起在YOLOv2训练过程中输出在终端的不同的参数分别代表什么含义,如何去理解这些参数?本篇文章中我将尝试着去回答这个有趣的问题. 刚好现在我正在训练一个YOLOv2模型,拿这个真实的例子来讨 ...
- 【洛谷P1978】 集合
集合 题目链接 显然,我们是要把数据先排序的, 然后从大到小枚举每个数,看是否能选上, 能选就选,不能拉倒 若能,二分查找a[i]/k,若查找成功,ans++ 将a[i]/k标记为不能选择 最后输出答 ...