天天看点

Java核心技术卷二笔记3

第三章 XML

XML和HTML都是标准通用标记语言SGML的衍生语言。XML有以下特点: 大小写敏感,与 不同。 结束标签不可省略。 若没有结束标签,元素必须以/结尾。 属性值必须用引号括起来。 所有的属性都必须有属性值。

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

或者

文档头之后是文档定义类型DTD,例如

但文档定义类型并不是必须的,最后XML文档的正文包括根元素,根元素包括子元素和文本。对于XML文档,属性只应该用来修改值的解释而不是指定值。

此外,XML文档中还会包括其他元素

字符引用:$#表示十进制值,&#x表示十六进制值。

实体引用:形式是&name;

CDATA部分:用来限定界限。在其中的字符串不必被解释为标记。里面的字符串不能是]]>。

处理指令:指专门在处理XML文档应用程序中使用的指令,用限定其界限。

注释:用限定其界限,注释内不该含有--。

解析器是这样一个程序:它读入一个文件,确定这个文件具有正确的格式,然后将其分解成各种元素。Java库中有两种解析器:

树形解析器:例如文档对象模型DOM解析器,将读入的XML文档转换成树结构。

流机制解析器:例如XML简单API(Simple API for XML, SAX)解析器,读入XML文档时生成对应的事件。

如果要指定文档结构,可以提供一个文档类型定义DTD或一个XML Schema定义。DTD或schema包含了用于解释文档应如何构成的规则,这些规则指定了每个元素的合法子元素和属性。

文档类型必须匹配根元素的名字,位于由[...]限定界限的块中。由于DTD会使得文件长度过长,可以转为SYSTEM声明实现这个目标,其中传入一个包含DTD的URL。

在文档中引用Schema文件时,需要在根元素中添加属性,例如

这个声明说明Schema文件config.xsd会被用来验证该文档。

xsd:sequence结构和DTD中的连接符号等价,xsd:choice和|操作符等价。

解析带有Schema的XML文件有以下几点要求:

必须打开对命名空间的支持。

必须对Schema工厂有以下处理

XML用命名空间来避免名字冲突,名字空间由URI来标识。之所以使用HTTP URL作为命名空间的标识符时因为这样方便确保它们是独一无二的,例如主机部分的唯一性直接由域名系统保证。

主要包括SAX解析器和StAX解析器,前者使用事件回调,后者提供了遍历解析事件的迭代器。

SAX解析器在解析XML输入数据的各个组成部分时会报告事件,但不会以任何方式存储文档,实际上DOM解析器是在SAX解析器的基础上构建的,它在接收到解析器事件时构建DOM树。

XHTML是一种HTML方言,且是良构的XML。

生成XML文档的过程是用文档的内容构建一颗DOM树,然后再写出该树的所有内容。

相比不带命名空间的文档,创建带命名空间的文档有以下步骤。

将生成器工厂设置为命名空间感知。

使用createElementNS而不是createElement来创建所有节点。

XSL转换机制可以指定将XML转换为其他格式的规则。