《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.1.1 XML文档的结构

3.1.1 XML文档的结构

XML文档应当以一个文档头开始,例如:

严格来说,文档头是可选的,但是强烈推荐你使用文档头。
注意:因为建立SGML是为了处理真正的文档,因此XML文件被称为文档,尽管许多XML文件是用来描述通常不被称作文档的数据集的。
文档头之后通常是文档类型定义(Document Type Def?inition,DTD),例如:

文档类型定义是确保文档正确的一个重要机制,但是它不是必需的。我们将在本章的后面讨论这个问题。
最后,XML文档的正文包含根元素,根元素包含其他元素。例如:

元素可以有子元素(child element)、文本或两者皆有。在上述例子中,font元素有两个子元素,它们是name和size。name元素包含文本“Helvetica”。
提示:在设计XML文档结构时,最好让元素要么包含子元素,要么包含文本。换句话说,你应该避免下面的情况:

在XML规范中,这叫做混合式内容(mixed content)。在本章中,稍后你将会看到,如果避免了混合式内容,就可以简化解析过程。

XML元素可以包含属性,例如:

何时用元素,何时用属性,在XML设计人员中存在一些分歧。例如,将font做如下描述:

似乎比下面的描述更简单一些:

但是,属性的灵活性要差很多。假设你想把单位添加到size的值中去,如果使用属性,那么就必须把单位添加到属性值中去:

嗨!现在必须对字符串“36 pt”进行解析,而这正是XML被设计用来避免的那种麻烦。而向size元素中添加一个属性看起来会清晰得多:

一条常用的经验法则是,属性只应该用来修改值的解释,而不是用来指定值。如果你发现自己陷入了争论,在纠结于某个设置是否是对某个值的解释所作的修改,那么你就应该对属性说“不”,转而使用元素,许多有用的文档根本就不使用属性。
注意:在HTML中,属性的使用规则很简单:凡是不显示在网页上的都是属性。例如在下面的超链接中:

字符串Java Technology要在网页上显示,但是这个链接的URL并不是显示页面的一部分。然而,这个规则对于大多数XML并不那么管用,因为XML文件中的数据并非像通常意义那样是让人浏览的。
元素和文本是XML文档“主要的支撑要素”,你可能还会遇到的其他一些标记,说明
如下:

时间: 2024-11-01 05:32:08

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.1.1 XML文档的结构的相关文章

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

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.8 XSL转换

3.8 XSL转换 XSL转换(XSLT)机制可以指定将XML文档转换为其他格式的规则,例如,转换为纯文本.XHTML或任何其他的XML格式.XSLT通常用来将某种机器可读的XML格式转译为另一种机器可读的XML格式,或者将XML转译为适于人类阅读的表示格式. 你需要提供XSLT样式表,它描述了XML文档向某种其他格式转换的规则.XSLT处理器将读入XML文档和这个样式表,并产生所要的输出(参见图3-7). XSLT规范很复杂,已经有很多书描述了该主题.我们不可能讨论XSLT的全部特性,所以我们

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3.1 文档类型定义

3.3.1 文档类型定义 提供DTD的方式有多种.可以像下面这样将其纳入到XML文档中: 正如你看到的,这些规则被纳入到DOCTYPE声明中,位于由[...]限定界限的块中.文档类型必须匹配根元素的名字,比如我们例子中的conf?iguration. 在XML文档内部提供DTD不是很普遍,因为DTD会使文件长度变得很长.把DTD存储在外部会更具意义,SYSTEM声明可以用来实现这个目标.你可以指定一个包含DTD的URL,例如: 或者 警告:如果你使用的是DTD的相对URL(比如"conf?ig.

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一第3章 XML

第3章 XML ▲ XML概述 ▲ 使用命名空间 ▲ 解析XML文档 ▲ 流机制解析器 ▲ 验证XML文档 ▲ 生成XML文档 ▲ 使用XPath来定位信息 ▲ XSL转换 Don Box等人在其合著的<Essential XML>(Addison-Wesley出版社2000年出版)的前言中半开玩笑地说道:"可扩展标记语言(Extensible Markup Language,XML)已经取代了Java.设计模式.对象技术,成为软件行业解决世界饥荒的方案."确实,正如你将在

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.2 解析XML文档

3.2 解析XML文档 要处理XML文档,就要先解析(parse)它.解析器是这样一个程序:它读入一个文件,确认这个文件具有正确的格式,然后将其分解成各种元素,使得程序员能够访问这些元素.Java库提供了两种XML解析器: 像文档对象模型(Document Object Model, DOM)解析器这样的树型解析器(tree parser),它们将读入的XML文档转换成树结构. 像XML简单API(Simple API for XML, SAX)解析器这样的流机制解析器(streaming pa

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.4 使用XPath来定位信息

3.4 使用XPath来定位信息 如果要定位某个XML文档中的一段特定信息,那么,通过遍历DOM树的众多节点来进行查找会显得有些麻烦.XPath语言使得访问树节点变得很容易.例如,假设有如下XML文档: 可以通过对XPath表达式/conf?iguration/database/username求值来得到database中的username的值. 使用Xpath执行下列操作比普通的DOM方式要简单得多: 1)获得文档节点. 2)枚举它的子元素. 3)定位database元素. 4)定位其子节点中

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.6 流机制解析器

3.6 流机制解析器 DOM解析器会完整地读入XML文档,然后将其转换成一个树形的数据结构.对于大多数应用,DOM都运行得很好.但是,如果文档很大,并且处理算法又非常简单,可以在运行时解析节点,而不必看到完整的树形结构,那么DOM可能就会显得效率低下了.在这种情况下,我们应该使用流机制解析器(streaming parser). 在下面的小节中,我们将讨论Java类库提供的流机制解析器:老而弥坚的SAX解析器和添加到Java SE 6中的更现代化的StAX解析器.SAX解析器使用的是事件回调(e

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7 生成XML文档

3.7 生成XML文档 现在你已经知道怎样编写读取XML的Java程序了.下面让我们开始介绍它的反向过程,即产生XML输出.当然,你可以直接通过一系列print调用,打印出各元素.属性和文本内容,以此来编写XML文件,但这并不是一个好主意.这样的代码会非常冗长复杂,对于属性值和文本内容中的那些特殊符号(如:"和<),一不注意就会出错. 一种更好的方式是用文档的内容构建一棵DOM树,然后再写出该树的所有内容.下面的小节将讨论其细节.