fatant-chp2

第三章 XML

XML概述

XML和HTML都是标准通用标记语言SGML的衍生语言。XML有以下特点:

  • 大小写敏感,

    不同。

  • 结束标签不可省略。
  • 若没有结束标签,元素必须以/结尾。
  • 属性值必须用引号括起来。
  • 所有的属性都必须有属性值。

xml文档的结构

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

<?xml version="1.0"?>

或者

<?xml version="1.0" encoding="UTF-8">

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

<!DOCTYPE web-app PUBLIC "-//Sun MicroSystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"

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

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

  • 字符引用:$#表示十进制值,&#x表示十六进制值。
  • 实体引用:形式是&name;
  • CDATA部分:用来限定界限。在其中的字符串不必被解释为标记。里面的字符串不能是]]>。
  • 处理指令:指专门在处理XML文档应用程序中使用的指令,用限定其界限。
  • 注释:用限定其界限,注释内不该含有--。

解析XML文档

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

  • 树形解析器:例如文档对象模型DOM解析器,将读入的XML文档转换成树结构。
  • 流机制解析器:例如XML简单API(Simple API for XML, SAX)解析器,读入XML文档时生成对应的事件。

验证XML文档

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

文档类型定义

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

XML Schema

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

<?xml version="1.0"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="config.xsd">
...
</configuration>

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

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

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

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

  • 必须对Schema工厂有以下处理

    final Sting JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
    final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
    factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
    

使用命名空间

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

流机制解析器

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

使用SAX解析器

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

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

生成XML文档

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

带命名空间的文档

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

  • 将生成器工厂设置为命名空间感知。
  • 使用createElementNS而不是createElement来创建所有节点。

XSL转换

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

分类:

技术点:

相关文章: