使用DTD的原因:

注意:由于它自身的一些缺点,DTD终将被淘汰,但是它还是要学习的。学习完DTD后,后面继续学习XML Schema。

1,通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

2,通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

3,您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

您还可以使用 DTD 来验证您自身的数据。

XML文件

<?xml version="1.0" encoding="utf-8"?>
<!--导入外部dtd文件-->
<!DOCTYPE Students SYSTEM "Students.dtd"> <Students>
<Student num="z001">
<name>小明</name>
<sex>男</sex>
<age>20</age>
<subject><![CDATA[数学&英语]]></subject>
<sport>篮球</sport>
</Student>
<Student num="z002">
<name>小红</name>
<sex>女</sex>
<age>21</age>
<subject><![CDATA[数学&英语]]></subject>
<sport>篮球</sport>
</Student>
<Student num="z003">
<name>小蓝</name>
<sex>男</sex>
<age>23</age>
<subject><![CDATA[数学&英语]]></subject>
<sport>篮球</sport>
</Student>
</Students>

DTD文件:

DTD注释格式:<![ IGNORE [ 注释的内容 ]]>

<![ IGNORE [定义Student子元素必须在 Studens父 元素内出现至少一次。]]>
<!ELEMENT Students (Student+)> <![ IGNORE [ 设置Student元素中必须有name,age,subject,sport元素并且他们的出现顺序也必须是这样的]]>
<!ELEMENT Student (name,sex,age,subject,sport)> <![ IGNORE [ 设置num属性为必需且唯一的但是属性的值不能是以数字开头]]>
<!ATTLIST Student
num ID #REQUIRED
> <![ IGNORE [ !ELEMENT name 定义 name 元素为 "#PCDATA" 类型
!ELEMENT sex 定义 sex元素为 "#PCDATA" 类型,下同
]]>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT sport (#PCDATA)>

测试的html文件:

<html>
<head>
<!--自己编写一个简单的解析工具,去解析XML DTD是否配套-->
<script language="javascript">
// 创建xml文档解析器对象
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
// 开启xml校验
xmldoc.validateOnParse = "true";
// 装载xml文档,即指定校验哪个XML文件
xmldoc.load("Students.xml");
document.writeln("错误信息:"+xmldoc.parseError.reason+"<br>");
document.writeln("错误行号:"+xmldoc.parseError.line);
</script> </head>
<body> </body>
</html>

先来用IE测试一下(必须用ie而且需要把IE浏览器的编码格式改为UTF-8其他浏览器兼容模式也OK)



大家可以看到我们的XML文件完全符合DTD的要求,下面我们来修改一下我们的XML文件

(1)将第6行的num属性删去的再刷新网页得到的结果是:



(2)删除第11行的sport元素



(3)将num=”z001”的学生的sex元素和name元素调换位置



这是我们作业的一小部分后面还要用C++解析(java解析的已经完成,博客里也有)。之前就看过DTD但是只是草草的过了一下,今天重新学了一下。希望大家通过这个例子可以快速掌握DTD,当然我的并不全面。大家可以去 DTD 教程 http://www.w3school.com.cn/dtd/index.asp 详细了解。

通过实例来学习XML DTD的更多相关文章

  1. JavaScripts学习日记——XML DTD Schema

    今日关键词: XML DTD Schema 1.XML 1 XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和 ...

  2. XML DTD详解(转)

    前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二篇介绍DTD,引入有效的XML的概念(符合语 ...

  3. XML DTD语法详解

    XML DTD详解   XML DTD详解 前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二 ...

  4. XML DTD详解

    XML DTD详解 一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集. 本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义. 元素 ...

  5. XML DTD验证

    XML DTD验证 一.什么是DTD 文档类型定义(DTD:Document Type Definition)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行 ...

  6. Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)

    *Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...

  7. XML Dtd Schema

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 整体比较: XML Schema符合XML语法结构. DOM.SAX等XML API很容易解析出XML Schem ...

  8. REST服务使用@RestController实例,输出xml/json

    REST服务使用@RestController实例,输出xml/json 需要用到的服务注解 org.springframework.web.bind.annotation.RestControlle ...

  9. ContentNegotiatingViewResolver多种输出格式实例: json/jsp/xml/xls/pdf

    ContentNegotiatingViewResolver多种输出格式实例: json/jsp/xml/xls/pdf 本例用的是javaConfig配置 以pizza为例. json输出需要用到的 ...

随机推荐

  1. monaco editor 实现自定义提示(sql为例)

    monaco editor :https://www.cnblogs.com/XHappyness/p/9414177.html 这里实现自己定义的提示: .vue <template> ...

  2. cacti 添加mysql 监控 (远程服务器)

    监控主机 192.168.24.69 ,以下用A表示 被监控主机 192.168.24.79,以下用B标识   记得在A服务器的cacti中导入监控mysql的templates文件   1.在B上安 ...

  3. activity属性设置大全

    activity属性设置大全 android:allowTaskReparenting=["true" | "false"]         是否允许activ ...

  4. asp.net异步上传

    界面如下:

  5. 【Python】面向对象--类的特殊成员方法

    类的特殊成员方法 1. __doc__ 表示类的描述信息 class Func(object): '''__doc__方法是用来打印类的描述信息''' def tell(self): pass def ...

  6. matlab eval【转】

    Matlab 简单谈谈EVAL函数的用法 EVAL(s)相当于把字符串s的内容作为语句来执行. 比如:eval('a=3*5') 和直接在command 窗口中输入 a=3*5 等效 eval 一个经 ...

  7. table 标签 语法

  8. 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp

    题目描述 经过了几周的辛苦工作,贝茜终于迎来了一个假期.作为奶牛群中最会社交的牛,她希望去拜访N(1<=N<=50000)个朋友.这些朋友被标号为1..N.这些奶牛有一个不同寻常的交通系统 ...

  9. JS变量对象详解

    JS变量对象详解 开年之后工作热情一直不是很高,这几天一直处于消极怠工状态.早上不想起床,起床了不想上班.明明放假之前工作热情还一直很高,一直心心念念的想把小程序项目怼出来,结果休假回来之后画风完全不 ...

  10. 【刷题】BZOJ 3175 [Tjoi2013]攻击装置

    Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1), ...