XML概述
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
XML作用
- 可以用来传输和存储数据
- 我们经常使用xml格式的文件来作为各种框架(spring,mybatis)配置文件
XML与HTML异同点
相同点
都是由标签,标签上的属性,文本构成
不同点
- XML 不是 HTML 的替代。
- XML 和 HTML 为不同的目的而设计:
- XML 被设计为传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
- HTML 旨在显示信息,而 XML 旨在传输信息。
XML文件的构成
1.XML文档声明
<? xml version=”1.0” encoding=”UTF-8” ?>
encoding:当前xml文件使用的编码(码表)
注意:文档声明必须放在xml文件的第一行第一列
2.XML自定义标签
- 标签命名规则
- 区分大小写
- 标签名不能包含空格,冒号等特殊字符
- 标签分类
- 根标签:最开始的标签,在整个XML文档中只有一对
内容结构
<根标签>
………<!—标签/文本/标签上的属性-->
</根标签>
- 普通标签
<开始标签></结束标签>
- 单标签
<标签名/>
3.XML标签上的属性
-
- 属性名必须以字母打头,不能包含特殊字符(空格,冒号等)
- 属性定义格式:属性名=”属性值”(属性可以用“”或‘’括起来)
- 一个标签可以有0个或多个属性,但是同一个标签上属性名不能重复
4.XML注释
<!--注释内容-->
5.转义字符
XML文件中如果有特殊字符,我们可以通过转义字符对其进行转义
6.CDATA区
-
- 如果出现大量的特殊字符,可以将其放在CDATA区中
- CDATA区中的内容不需要写转义字符,可以直接显示
- 但是CDATA区中的内容将来不会被解析器解析
XML文档约束
作用:用来规定xml文件中可以写哪些标签,哪些属性,甚至是哪些属性值等等
学习目的:不要求你会写约束文档,我们可 以根据约束文档把对应的xml文件内容写出即可
DTD约束
- 在XML文件中引入DTD文件格式
- 引入本地的dtd文件
<! DOCTYPE 根元素 SYSTEM “DTD文件的相对路径或绝对路径”>
SYSTEM:代表引入本地的DTD文件
-
- 引入互联网的dtd文件
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">
Schema约束
- Schema约束概述
a.Schema约束本身也是一个xml文件,但是它使用的是.xsd的后缀名,为了表明该文件是一个schema约束文件
b.Schema约束比DTD约束更加强大,它可以约束更加细致,例如:可以对标签出现的具体次数以及属性值的具体类型等其他更细节的约束
- Schema约束中的命名空间(namespace,ns)
命名空间是为了区分不同Schema文件中的同名标签或属性
- xml引入schema约束
<!--
xmlns属性:代表默认命名空间(没有起别名)
命名空间一般使用域名作为值,因为可以保证整个互联网唯一
我们要引入哪个约束文档,就写该约束文档中targetNamespace属性
对应的值即可
xmlns:别名:带别名命名空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
引用的是官方的约束,因为我们想使用schemaLocation属性,它出自官方约束
xsi:schemaLocation="约束文件命名空间 约束文件"
schemaLocation属性是为了指明books.xsd的位置
-->
XML解析
- 常见解析方式
- DOM解析:类似HTML的DOM编程,将XML文档变成一颗DOM树加载到内存中,提供对象供我们解析
- 优点:包留元素与元素之间关系,我们可以进行增(增加标签/属性)删(删除标签/属性)改(修改属性值)查(获取标签/属性)操作
- 缺点:如果xml文档过大,将xml变成一颗DOM树加载到内存会导致内存溢出
- SAX解析:扫描一行,解析一行
- 优点:解析速度快,可以处理体积庞大的xml文件
- 缺点:只能读操作,逐行解析后释放资源,可以避免内存溢出
- PULL解析:Andorid内置的XML解析方式,类似SAX
- SAX解析:扫描一行,解析一行
- 常见解析开发包
- JAXP:sun公司提供的支持DOM和SAX解析
- JDOM:dom4j兄弟
- jsoup:处理HTML特定解析开发包
- dom4j:常用解析开发包
dom4j中的重要类和方法
- SaxReader类
- read() 读取/加载xml文档
- Document类:代表内存中整个xml文档
- getRootElement() 获取根节点
- Element类
- elements():获取指定名称的所有子标签,也可以不指定名称
- element():获取指定名称的第一个子标签,也可以不指定名称
- getName():获取当前元素的名称
- attributeValue():获取指定属性名的属性值
- elementText():获取指定名称子标签文本
- getText():获取当前标签文本