欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-10-10 20:04:20
本文实例讲述了js操作xml中dtd介绍及使用方法。分享给大家供大家参考,具体如下: 什么是dtd,为什么需要dtd? dtd为英文document type...

本文实例讲述了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>

ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线xml/json互相转换工具:

在线格式化xml/在线压缩xml

xml在线压缩/格式化工具:

xml代码在线格式化美化工具: