JS操作XML中DTD介绍及使用方法分析
本文实例讲述了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数据。
元素的定义
DTD中的修饰符号:
这部分符号可以联系正则表达式的符号来记忆。重点内容
如何生成DTD文档
DTD文档有三种应用形式:
1.内部DTD文档
<!DOCTYPE 根元素[定义内容]
2.外部DTD文档
<!DOCTYPE 根元素 SYSTEM "DTD文件路径"
3.内外部DTD文档结合
<!DOCTYPE 根元素 SYSTEM "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
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线XML/JSON互相转换工具: http://tools.zalou.cn/code/xmljson
在线格式化XML/在线压缩XML: http://tools.zalou.cn/code/xmlformat
XML在线压缩/格式化工具: http://tools.zalou.cn/code/xml_format_compress
XML代码在线格式化美化工具: http://tools.zalou.cn/code/xmlcodeformat
- Flash/Flex学习笔记(26):AS3自定义右键菜单
- Python27中Json对中文的处理
- Python在VSCode中进入交互界面调试
- CentOS7下单机部署RabbltMQ环境的操作记录
- Flash/Flex学习笔记(24):粒子效果
- 针对业务日志的监控报警设置
- 对广晟有色的数据分析
- Flash/Flex学习笔记(22):滤镜学习
- Python输出信息
- Flash/Flex学习笔记(21):利用colorTransform改变对象的颜色及透明度
- 网站访问状态和超时时间监控报警设置
- 为treeview添加客户端事件
- Flash/Flex学习笔记(20):贝塞尔曲线
- 磁盘挂载问题:Fdisk最大只能创建2T分区的盘,超过2T使用parted
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux配置SSH和Xshell连接服务器的教程(图解)
- 增强Linux内核中访问控制安全的方法
- 使用Samba在Linux服务器上搭建共享文件服务的方法
- CentOS Yum编译安装MySQL 5.6
- Linux中环境变量配置的步骤详解
- 详解Linux搭建DNS服务器
- 一篇文章弄懂Linux磁盘和磁盘分区
- Ubuntu 17.04系统下源码编译安装opencv的步骤详解
- 如何在Linux中自定义bash命令提示符
- 详解如何在Linux上一次性批量重命名一组文件
- 虚拟机中centos修改时间的方法
- Ubuntu 18.04 Server 设置静态IP 的方法
- 嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)
- CentOS下MySQL的彻底卸载的几种方法
- centos7中安装Android SDK的方法步骤