1. 概述
- 概念:Extensive markup Language,可扩展标记语言
- 可扩展:标签可自定义
- 功能:存储数据,可做配置文件,可在网络中传输
- xml和html的区别
- xml标签自定义,html标签预定义
- xml语法严格
- xml存储数据,html展示数据
2.语法
基础语法
- 文档的后缀名为 .xml
- xml第一行必须定义为文档声明
- xml文档中有且仅有一个根标签
- 属性值必须使用引号引起来
- 标签必须正确关闭
- 标签名称区分大小写
1
2
3
4
5
6
<users>
<user id="user1">
<name>hxx</name>
</user>
</users>组成部分
文档声明
- 格式:
<?xml 属性列表 ?>
- 属性列表
- version:版本号,必须写
- encoding:编码方式。告知解析引擎当前文档使用的字符集,默认ISO-8859-1
- standalone:是否独立。取值yes no,表示是否依赖与其他文件
- 格式:
指令:
<?xml-stylesheet type="text/css" href="../CSS/a/css"?>
标签
- 名称可以包含字母数字和其他的字符
- 名称不能以数字或者标签符号开始
- 名称不能以字母xml、XML等等开始
- 不能包含空格
属性
文本内容
CDATA区:在该区域中的数据会被原样展示
格式:
<![CDATA[文本内容]>
3.约束
规定xml文档的书写规则
分类
DTD
外部DTD:将约束文件定义在外部的dtd文件中
- 引入本地DTD文件:
<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">
- 引入网络中DTD文件:
<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件位置的url">
- 引入本地DTD文件:
内部DTD:
<!DOCTYPE 根标签[内容]>
student.dtd
1
2
3
4
5
6
7
8
9
10<!ELEMENT students (student*) >
<!--*号代表出现0次或多次,+号代表至少出现1次
根标签students,子标签student-->
<!ELEMENT student (name,age,sex) >
<!--#PCDATA代表字符串-->
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT sex (#PCDATA) >
<!--student标签有ID属性,且必须有-->
<!ATTLIST student number ID #REQUIRED>- xml文件
1
2
3
4
5
6
7
8
9
<students>
<student number="stu1">
<name>hxx</name>
<age>22</age>
<sex>女</sex>
</student>
</students>schema:复杂的约束技术,文件后缀名 .xsd
引入约束文件
根元素
引入xsi前缀:xmlns:xsi = “”
引入xsd文件命名空间,xsi:schemaLocattion=””
为每一个xsd约束声明一个前缀,作为标识:xmlns=””
4.解析
- 操作xml文档,将文档中的数据读取到内存中
- 解析方式:
- DOM:将标记语言一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD所有操作
- 缺点:占内存
- SAX:逐行读取,基于事件驱动
- 优点:占内存小
- 缺点:只能读取,不能增删改
- DOM:将标记语言一次性加载进内存,在内存中形成一颗dom树
- 常见解析器
- JAXP:sun公司提供的解析器,支持dom和sax两种思想
- DOM4J
- Jsoup:java的HTML解析器
- PULL:Android操作系统内置的解析器,sax方式