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>悟空&quot;&apos;&lt;&gt;</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)的更多相关文章

  1. dom技术解析xml下jaxp解析器详细代码

    1.使用jaxp实现查询操作 person.xml <?xml version="1.0" encoding="UTF-8" standalone=&qu ...

  2. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  3. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  4. Dom方式解析XML

    public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...

  5. 用DOM方式解析XML

    一.用DOM方式解析XML 此例子节点结构如下: 1.获取book节点属性 (1).如果不知道节点的属性,通过 NamedNodeMap attrs = book.getAttributes(); 来 ...

  6. 在iOS 开发中用GDataXML(DOM方式)解析xml文件

    因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...

  7. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

  8. sax技术解析xml下jaxp解析器详细代码

    *解析xml的两种技术dom和sax dom:根据xml的层级结构在内存中分配一个树形结构,把xml标签,属性,文本封装成对象. sax方式:事件驱动,边读边解析. 在javax.xml.parser ...

  9. Java眼中的XML--文件读取--1 应用DOM方式解析XML

    初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...

随机推荐

  1. Python爬虫《http和https协议》

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  2. H5新特性监听手机的返回键

    var hiddenProperty ='hidden' in document ? 'hidden' :'webkitHidden' in document ? 'webkitHidden' : ' ...

  3. 使用HTML5 canvas做地图(2)瓦片以及如何计算的

    上一篇也说到瓦片,我们为什么使用瓦片?这一篇主要是关于如何拼接地图? 下面的一张图,可以一眼明了,地图是如何切割以及拼接的. 瓦片信息 瓦片信息包括切图原点,瓦片大小,格式,分辨率以及分辨率级别等. ...

  4. SQL Server2008宝典 全书代码

    -- ============================================= -- Create database template -- ==================== ...

  5. Android 自定义圆形图表

    <com...SignChartView android:id="@+id/signChart" android:layout_width="265dp" ...

  6. WAKE-WIN10-SOFT-软件-Matlab配置及工具箱

    1Matlab 1,1Matlab下载,安装,配置,,, 1,2 2工具箱 2,1LibSVM 必应:https://www.bing.com/search?q=libsvm&qs=n& ...

  7. 如何在Chrome development tool里查看C4C前台发送的请求细节

    我们可以在Chrome development tool的network tab里观察到从前台UI发送到后台的HTTP请求: 更多Chrome Development Tool的使用工具请查看我的博客 ...

  8. postgres循环sql

    CREATE OR replace function loop_addDevice(i integer) RETURNS integer as $$ declare count alias ; all ...

  9. Android(java)学习笔记7:多线程程序练习

    需求: 某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售票. 两种方式实现 A:继承Thread类 B:实现Runnable接 1. 首先我们利用方式 ...

  10. 问题 A: B 继承 圆到圆柱体

    题目描述 定义了Circle圆形类,在此基础上派生出Cylinder圆柱体类. Circle圆形类定义如下: class Circle { public: Circle(double r):radiu ...