简单说明:
- 参考书籍 ----- 《XML实战教程》
- XML涉及众多知识,命名空间、DTD、XSD、XPath、Xlink、DOM、SAX、XSL等。DTD与XSD是XML的校验规则技术,DOM、SAX是获取数据的技术,XSL与XSLT都是XML的显示技术
XML文档声明
声明XML文档时有3个属性:version属性、encoding属性和standalone属性。
1. version属性
目前XML规范有两个版本:1.0和1.1版本。
<?xml version="1.0"?>
或者
<?xml version="1.1"?>
这两个版本的规范标准几乎是一样的,只是给元素命名时,会对某些Unicode字符采取不同的处理方法。如果确实需要使用XML1.1规范,那么必须确保所使用的XML解析器支持1.1版本。另外,当需要与其他用户交换XML文档时,必须确保对方的解析器也支持XML1.1版本,否则会引起操作性问题。
2. encoding属性
XML文档中通过声明encoding属性可以告诉解析器文档所采用的编码方式。如果文档没有说明编码,则会使用默认的UTF-8或UTF-16,因此解析器必须支持这两种编码格式。
3. standalone属性
如果XML声明中提供了standalone属性,则它的值必须是yes或者是no。yes表示文档可以完全独立存在,不依赖与其他任何文件;no表示文档可能依赖于一个外部的DTD文件。
4. 注意事项
- XML声明必须从“<?xml>”开始,到“?>”为结束
- 声明语句里必须包含version属性,但是encoding属性和standalone属性是可选的
- version、encoding和standalone三个属性必须按上述排序
- version属性值必须是1.0或是1.1
- XML声明必须放在文档的开头,前面不能有空行或空格。关于这一点,有些解析器不会那么严格
XML元素概述
元素概念
在开始标记到结束标记之间的吧、文本以及标记本身统称为元素。
<?xml version="1.0" encoding="UTF-8"?>
<name nickname="Tom Bill">
<firstname>Tom</first>
<middlename />
<lastname>Bill</lastname>
</name>
如上例中的<firstname>是一个开始标记,</firstname>是一个结束标记,<firstname>Tom</first>则表示一个元素。
元素命名
元素之间可以进行嵌套,并且一个XML文档中必须只要一个根元素。实际上,即使文档没有任何内容,它也必须亚由一个根元素。
无论是给元素命名还是为标记命名,都要遵守以下规则:
- 名称第一个字母必须是英文或是下划线
- 其他字符可以是数字、连字符“-”和句点
- 名字中不能有空格
- 名称的大小写敏感
- 元素名可以是中文。但是在不支持中文的环境中将不能够解释包含中文字符的XML文档,所以应进项选择有意义的英文名称表示
属性概念
属性是采用name/value的形式说明元素的特征,它们插入到开始标记里,但是不允许插入到结束标记里。如果属性值中要使用单引号或尖括号时,就必须使用字符和实体引用。属性值使用单括号括起来,单引号和双引号都可以。如上例中的nickname=“Tom Bill”
XML标记使用字符的5种内置实体:
实体 | 实体引用 | 含义 |
lt | < | < |
gt | > | > |
amp | & | & |
apos | ' | ' |
quot | " | " |
XML命名空间
自定义命名空间
XML文档使用命名空间解决XML元素的名称冲突和多义性的问题。命名空间是通过使用一系列保留属性声明的,这一系列保留属性的名称必须是xmlns或以“xmlns:”作为前缀。基本的语法如下所示:
xmlns:prefix="URI"
- xmlns:定义命名空间的关键字
- perfix:命名空间前缀属性
- URI:用来标识抽象或物理资源的紧凑字符串,大多数情况下,URI引用用来标识物理资源
<pers:person xmlns:pers="http://www.wiley.ers" />
这里的前缀pers没有任何含义,唯一的作用只是一个代表命名空间的名称,可以使用其他任何的前缀代替它,而且文档的意义完全一样。
默认的命名空间
一个默认的命名空间很像一个普通的命名空间,只要不需要在这个命名空间的所有元素前面再添加前缀。如下所示:
<person xmlns="http://www.wiley.com/pers">
<name>tom</name>
</person>
可以在一个元素声明多个命名空间,但是其中只有一个是默认的命名空间。如下所示:
<person xmlns="http://www.wiley.com/pers" xmlns:html="http://www.w3.org/1999/xhtml" >
<name/>
<html:p>这是一个最基本的段落</html:p>
</person>
命名空间的注意事项
- 不能为一个元素同时声明两个默认的命名空间
- 可以在子元素中声明命名空间
- 可以为属性添加命名空间