基础语法
声明
- version
- encoding:默认是 UTF-8
- 如果 encoding=”GB2312”,就可以在其中使用简体中文。还有 ISO-8858-1
- 注释用 来包含。不能放在第一项,因为声明必须第一行,不能放在任何一个标记中
形式良好的 XML 文档
- 对大小写敏感
- 必须有根元素
- 属性值必须加引号
- 不可以加特殊字符,需要引用
- 会保留空格
命名规则
元素
- 字母数字和其他
- 不能以数字或者标点开始
- 不能以 xml(各种大小写)开始
- 名称不能包含空格
最佳
比较短;
避免:- . :等,用下划线
属性
尽量避免使用属性,与数据有关的都用元素来描述,属性来提供与数据无关的信息。
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
xml 验证
拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
XML DTD(Document Type Definition)
XML 使用 DTD 来描述数据
1 |
XML Schema
W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:
显示
我们可以采用 CSS 和 XSLT 来显示 XML,一般提倡 XSLT
1 |
命名空间
当发生冲突的时候,我们可以采用两种方式解决
使用前缀来避免命名冲突
1 | <h:table> |
使用命名空间(Namespaces)
xmlns:namespace-prefix="namespaceURI"
与仅仅使用前缀不同,我们为
1 | <h:table xmlns:h="http://www.w3.org/TR/html4/"> |
默认的命名空间
xmlns="namespaceURI"
1 | <table xmlns="http://www.w3.org/TR/html4/"> |
XML CDATA 忽略解析
PCDATA 指的是被解析的字符数据(Parsed Character Data)。
XML 解析器通常会解析 XML 文档中所有的文本。
非法的 XML 字符必须被替换为实体引用(entity reference)。
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,”<” 和 “&” 是非法的。
“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 结束:
1 | <script> |
关于 CDATA 部分的注释:
- CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。
- 标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。
XSL(Extensible Stylesheet Language)显示 XSL
XSLT 是一种用来转换 XML 文档结构的语言,一个 XSL 文件本身就是一个 XML 文档。
XSL 包含三部分:
XSLT——转换 XML 文档
XPath——浏览定位 XML 文档
XSL-FO——格式化 XML 文档
CSS 与 XSL
CSS 很多缺点:不能重排序,不能判断哪个元素显示;不能统计计算元素中的数据
技术难题
- 从源 XML 文档读取信息:
XPath:定位
XSLT:定位之后读取 - 目标 XML 写入信息
XSLT 元素
模板驱动模型
XSL 提供了一种归并功能。XSL 样式表包含了一个描述结果结构的模板。
XPath
1 | <root> |
/root/item[position()=1](第一个 title)
/root/item/definition/title(第二个 title)
/root/item(全部 item)
./@version(选择属性节点)
XSLT
有 37 个元素
本身是一个 xml 文件
在源 xml 文件中引用样式表
<?xml-stylesheet type="text/xsl href="URI""?>
声明
从根元素开始
- <xsl:stylesheet version=”1.0” xmlns:xsl=”URI”> 表明这是一个样式表文件,URI 提供了定义的命名空间
- <xsl:output encoding=””>指定输出的 HTML 使用的编码
- <xsl:template match=”/“>指明了根
Java 处理 XML
SAX,DOM 是解析器所采用的两种重要的解析 API
DOM(文档对象模型)
用于描述节点与节点之间的关系
较好的随机访问性能
平台无关
基于树的整颗对象树,建立在内存中
- 创建 DocumentBuilderFactory,用该对象创建 DocumentBuilder。
- 创建 DocumentBuilder。用它来解析得到 Document 对象。
- 解析文件以创建 Document 对象。
SAX(Simple API for XML)
顺序遍历文档,然后产生所有节点事件,在内存中只保留当前处理部分。
适用
大数据量有优势
在文档中检索一个特定的值
创建文档子集,以便后继 DOM 处理
基于事件的机制
优点
与 xml 文件大小无关;不需要等到文档解析结束,就可以开始处理
缺点
不允许随机访问,比 DOM 复杂,不可能对数据进行更改,或者返回数据流之前的数据
两个可以结合使用