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手机页面剖析

    <!--强制使用webkit内核进行渲染--><meta http-equiv="X-UA-COMPATIBLE" content="IE=edge, ...

  3. Apache Flume

    An Event is a unit of data that flows through a Flume agent. The Event flows from Source to Channel  ...

  4. Strom入门

    Worker.Executor.Task详解: Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:1. Worker Process(工作进程)——S ...

  5. apk接入google play邮箱登陆及充值注意事项

    unity3d 接入google play商店相关sdk,相关要求A.环境配置: 1.手机安装谷歌安装器 2.使用谷歌安装器安装Google 服务框架.Google Play服务.Google Pla ...

  6. Set up ruby debugging environment

    Today I finally got ruby debugging working in Eclipse. Below are the major setup steps involved, as ...

  7. matlab练习程序(随机粒子切换特效)

    视频制作软件中一般都会有相邻帧切换的特效,我过去用过vagas好像就有很多切换特效. 我想这个也算是其中一种吧,虽然我不确定实际中到底有没有这种切换. 实际上我只是下班后太无聊了,写着玩的,没什么高深 ...

  8. matlab练习程序(模糊集图像增强)

    算法有很多变种.不过主要就是以下三步. 1.设计隶属度函数将图像从空间域变换到模糊集域. 2.设计模糊增强算子,在模糊集域对图像进行处理. 3.根据第1步的隶属度函数重新将图像从模糊集域变换到空间域. ...

  9. FileHelpers 用法 z

    用FileHelplers导出csv数据: [DelimitedRecord(",")] [IgnoreEmptyLines()] [ConditionalRecord(Recor ...

  10. 初识 visJs (基于html5 canvas开发的可视化框架)

    本文参考 https://github.com/almende/vis 编写并且自己总结各种快捷方式,意在帮助开发可视化图表的前端朋友快速了解visJs. vis.js Vis.js是一个基于浏览器的 ...