JS操作XML中DTD介绍及使用方法分析


Posted in PHP onJuly 04, 2019

本文实例讲述了JS操作XML中DTD介绍及使用方法。分享给大家供大家参考,具体如下:

什么是DTD,为什么需要DTD?

DTD为英文Document Type Definition,中文意思为“文档类型定义”。DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码。

一个HTML文档的基本结构可分为两个主要部分:

<html>
  <head>
   头部信息
  </head>
  <body>
   可视内容
  </body>
</html>

一个DTD应该放在每一个文档的第一行(包括空白).这样正确地放置,你的DTD才能告诉浏览器的用的是什么标记语言。在通常情况下,如果你编写的是正确代码,并拥有一个合适的DTD,浏览器将会根据W3C的标准显示你的代码。
良好的xml文档:符合xml的语法规则。
有效的xml文档:符合xml语法规则的同时还需要符合DTD文档类型定义。
有效(Valid)的XML文档:
首先,XML文档是个格式正规的(Well-formed)XML文档;
其次,需要满足DTD的要求,这样的XML文档称为有效的(Valid)XML文档。
利用DTD可以对xml文档的各个节点进行约束定义,使开发遵循一套“标准”。
DTD可以约束xml文档出现的元素,元素名称,元素的先后顺序,属性等。

DTD文档与XML文档实例的关系

类与对象;
数据库表结构与数据记录;

有了DTD,每个XML文件可以携带一个自身格式的描述。
有了DTD,不同组织的人可以使用一个通用DTD来交换数据。
应用程序可以使用一个标准DTD校验从外部世界接收来的XML数据是否有效。
可以使用DTD校验自己的XML数据。

元素的定义

JS操作XML中DTD介绍及使用方法分析

DTD中的修饰符号:

JS操作XML中DTD介绍及使用方法分析

这部分符号可以联系正则表达式的符号来记忆。重点内容

如何生成DTD文档

DTD文档有三种应用形式:

1.内部DTD文档

<!DOCTYPE 根元素[定义内容]>

2.外部DTD文档

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

3.内外部DTD文档结合

<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

JS操作XML中DTD介绍及使用方法分析

内部DTD

一个内部DTD的例子:
上半部分是DTD,下面是XML文档,文档要符合DTD。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE poem [
  <!ELEMENT poem (author, title, content)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT content (#PCDATA)>
]>
<!--为元素poem定义了三个子元素author title content,
这三个元素必须要出现并且必须按照这个顺序
少元素不行,多元素也不行
-->
<!--指明author,title,content里面的内容是字符串类型-->
<poem>
  <author>王维</author>
  <title>鹿柴</title>
  <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
</poem>

上面的文档就是格式良好,并且有效的。

#PCDATA(Parsed Character Data) ,可解析的字符数据,即字符串。

上面部分是DTD,在下面编写XML文档时,如果不符合其DTD规范,用XMLSpy做检查的时候,是well-formed的,但是却不是valid的。

比如根元素写:

<Students>
</Students>

Validate检查的时候就会报错,根元素和DTD中的poem不符。

制作DTD约束校验工具

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script>
var doc = new ActiveXObject("Mircosoft.XMLDOM");
doc.validateOnParse = true;
doc.async = false;//同步校验
function jiaoyan(){
  doc.load("./01.xml");//加载被校验的文档
  var rst = document.getElementById("result");
  rst.innerHTML += "错误信息:" + doc.parseError.reason + "<br />";//校验的错误信息
  rst.innerHTML += "错误行数:" + doc.parseError.line + "<br />";//出错代码的行数
  rst.innerHTML += "错误列数:" + doc.parseError.linepos + "<br />";//出错代码的列数
  rst.innerHTML += "错误代码:" + doc.parseError.errorCode + "<br />";//出错代码的编号
}
</script>
</head>
<body>
<input type=button value="校验" onclick="jiaoyan()" />
<div id="result"></div>
</body>
</html>
PHP 相关文章推荐
PHP的面向对象编程
Oct 09 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
Jan 07 PHP
php join函数应用
May 04 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 PHP
PHP操作XML中XPath的应用示例
Jul 04 #PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 #PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 #PHP
PHP创建XML接口示例
Jul 04 #PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 #PHP
PHP实现关键字搜索后描红功能示例
Jul 03 #PHP
Smarty模板类内部原理实例分析
Jul 03 #PHP
You might like
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
Python中常用信号signal类型实例
2018/01/25 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python字符串的拼接方法总结
2019/11/18 Python
python字符串判断密码强弱
2020/03/18 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
学生检讨书范文
2015/01/27 职场文书
大学生创业计划书
2019/06/24 职场文书