3.3 验证XML文档

在前一节中,我们了解了如何遍历DOM文档的树形结构。然而,如果仅仅按照这种方法来操作,会发现需要大量冗长的编程和错误检查工作。你不但需要处理元素间的空白字符,还要检查该文档包含的节点是否和你期望的一样。例如,当你在读入下面这个元素时:

你将首先得到第一个子节点,这是一个含有空白字符“n”的文本节点。你跳过文本节点找到第一个元素节点。然后,你要检查它的标签名是不是“name”,还要检查它是否有一个Text类型的子节点。接下来,转到下一个非空白字符的子节点,并进行同样的检查。那么,当文档作者改变了子元素的顺序或是加入另一个子元素时又会怎样呢?要是对所有的错误检查都进行编码,就会显得太琐碎麻烦了,而跳过这些检查又显得不慎重。
幸好,XML解析器的一个很大的好处就是它能自动校验某个文档是否具有正确的结构。这样,解析就变得简单多了。例如,如果知道font片段已经通过了验证,那么你不用进一步检查就能得到其两个孙节点,并把它们转换成Text节点,得到它们的文本数据。
如果要指定文档结构,可以提供一个文档类型定义(DTD)或一个XML Schema定义。DTD或schema包含了用于解释文档应如何构成的规则,这些规则指定了每个元素的合法子元素和属性。例如,某个DTD可能含有一项规则:

这项规则表示,一个font元素必须总是有两个子元素,分别是name和size。将同样的约束用XML Schema表示如下:

与DTD相比,XML Schema可以表达更加复杂的验证条件(比如size元素必须包含一个整数)。与DTD语法不同,XML Schema自身使用的就是XML,这为处理Schema文件带来了方便。
在下一节中,我们将详细讨论DTD。接着简要介绍XML Schema的一些基础知识。最后,我们会展示一个完整的应用程序来演示验证是如何简化XML编程的。

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3 验证XML文档相关推荐

  1. Java核心技术·卷I(原书第12版)

    内容介绍... 随着Java的发展,<Java核心技术>从第1版到第11版一路走来,受到了广大Java程序员的青睐,成为最畅销的Java经典书籍. 这本书已经过彻底的修改,涵盖了Java ...

  2. Java语言程序设计 基础篇 原书第10版 ,梁勇著,百度云链接及密码

    一本好书,对java小白来说是一本非常不错的书.第一次分享,请大家多多指教, Java语言程序设计 基础篇 原书第10版 ,梁勇著 链接:https://pan.baidu.com/s/1-MN_AS ...

  3. Java核心技术 卷II 高级特性 原书第9版pdf

    下载地址:网盘下载 内容简介  · · · · · · Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与<Java编程思想&g ...

  4. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

    前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开 ...

  5. Java核心卷Ⅱ(原书第10版)笔记(上)

    Java核心卷Ⅱ(原书第10版)笔记(上) 写在最前面,个人认为,卷Ⅱ更适合当手册使用,更多的是讲API的使用,前两章内容比较实际,要是合并到卷一就好了. 文章目录 第1章 Java SE 8 的流库 ...

  6. 计算机流体力学软件基础及工程应用,流体力学及其工程应用(英文版·原书第10版)2013年版...

    流体力学及其工程应用(英文版·原书第10版) 出版时间:2013年版 内容简介 <流体力学及其工程应用(英文版·原书第10版)/时代教育·国外高校优秀教材精选>继承并发扬了前9版讲述流体力 ...

  7. java ee 指南 pdf_Java EE 7权威指南:卷1(原书第5版) 中文pdf

    资源名称:Java EE 7权威指南:卷1(原书第5版) 中文pdf 第一部分 引言 第1章 概述 2 第2章 使用教程示例 27 第二部分 平台基础知识 第3章 资源创建 38 第4章 注入 41 ...

  8. java ee7权威指南 卷1,JavaEE7权威指南,卷1(原书第5版)中文pdf

    资源名称:Java EE 7权威指南:卷1(原书第5版) 中文pdf 第一部分 引言 第1章 概述 2 第2章 使用教程示例 27 第二部分 平台基础知识 第3章 资源创建 38 第4章 注入 41 ...

  9. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.2 如何读入文本输入

    2.2.2 如何读入文本输入 最简单的处理任意文本的方式就是使用在卷Ⅰ中我们广泛使用的Scanner类.我们可以从任何输入流中构建Scanner对象. 或者,我们也可以将短小的文本文件像下面这样读入到 ...

  10. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化

    2.4.6 为克隆使用序列化 序列化机制有一种很有趣的用法:即提供了一种克隆对象的简便途径,只要对应的类是可序列化的即可.其做法很简单:直接将对象序列化到输出流中,然后将其读回.这样产生的新对象是对现 ...

最新文章

  1. 一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)
  2. “Razor” – a new view engine for ASP.NET
  3. C++容器遍历时删除元素
  4. 积德行善真的有用吗?
  5. 利用汇编挖掘编程语言的本质
  6. 读书笔记_量化交易如何建立自己的算法交易02
  7. 刚刚,华为发布全球首款 5G 基站核心芯片!
  8. 从0开始写sql脚本到执行sql脚本。
  9. Maven的下载及安装
  10. 一个简单实用的boost升压电路
  11. 视频垂直翻转并添加马赛克的步骤
  12. linux添加jetdirect协议,《HP jetdirect 管理指南》教程.pdf
  13. UCloud成首个通过乌云认证的云计算平台
  14. 求和计算机教案,七年级信息技术《Excel求和》教学设计
  15. CANopen--基于DS402协议的伺服电机原点回零模式
  16. FlowForge 重要组件及概念
  17. 借助支付宝实现跨行跨省转账无手续费
  18. 《阿信》讲述了日本着名的百货连锁企业八佰伴创始人艰苦的过程
  19. 阿里云免费SSL证书过期替换
  20. ICME2021:基于VVC的角度加权预测

热门文章

  1. 层次聚类 簇数_聚类(一):K-means、层次、DBSCAN、均值漂移、K-Means 与 KNN
  2. 重庆计算机一级考试在线做,全国(重庆考区)计算机一级考试教程.doc
  3. java--小示例:-2:优化版本,多个文件的调用。
  4. docker基础1--下载制定docker镜像的两种方法:
  5. FR获取当前控件位置值并转换(或赋值可参考)
  6. JS日期前后一天方法
  7. FR JavaScript 调用存储执行并输出影响行数
  8. python股票_python股票 - 随笔分类 - 無碼 - 博客园
  9. python监听键盘输入_Python监听鼠标键盘事件
  10. cpu要和gpu搭配吗_搞懂GPU为什么比CPU“快”