XML
XML
概念:Extersible Markup Language,可扩展标记语言。
可扩展:标签都是自定义的。
功能:存储数据
- 作为配置文件
- 在网络中传输
XML与HTML区别:
XML标签都是自定义的,HTML标签都是预定义的。
XML语法严格,HTML语法松散。
XML用于存储数据,XML用于展示数据。
- W3C:万维网联盟
- properties:配置文件,数据存储文件。
基本语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<?xml version="1.0" encoding="utf-8" ?>
<users>
<user id="1">
<name>张加林</name>
<age>18</age>
<gender>男</gender>
</user>
<user id="2">
<name>张加林</name>
<age>18</age>
<gender>男</gender>
</user>
<user>
<name>张加林</name>
<age>18</age>
<gender>男</gender>
</user>
<user id="3">
<name>张加林</name>
<age>18</age>
<gender>男</gender>
</user>
</users>?xml文档声明必须在第一行
有且仅有一个根标签,属性值必须使用引号引起来(单双都可以)
标签必须正确关闭
xml标签区分大小写
xml组成部分:
文档声明
1.格式:<?xml 属性列表 ?>
2.属性列表:
version:版本号,必须的属性。
encoding::编码方式,告知解析引擎当前文档使用的编码方式,默认为ISO-8859-1。
standalone:是否独立,取值[yes|no]:是否依赖其他文件。
指令
结合CSS
1
2
3
4
5
6
7
8<?xml version='1.0' encoding='utf-8' standalone='no' ?>
<?xml-stylesheet type='text/css' hredf='a.css'>
<users>
<user>
<name>张加林<name/>
<age>20<age>
<user>
<users/> 标签:标签名自定义。
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
属性:id值唯一
文本:特殊字符需要使用转义
CDATA区:在该区域的数据会被原样展示。
1
2
3
4
5<test>
<![CDATA[
if(a<b && a>c){}
]]>
</test>
约束
编写XML:用户,软件使用者
解析XML:软件(半成品软件,如:框架),一般软件会有XML文档书写的说明规则(约束文档)。
用户和软件之间可以通过XML文档进行交互。
约束:规定XML文档的书写规则
- 能够在XML中引入约束文档
- 能够简单的读懂约束文档
分类:
DTD:一种简单的约束技术
引入DTD文档到XML文档中
内部DTD:将约束规则定义在xml文档中
外部DTD:将约束规则定义于外部的DTD文件中
1
2本地引入:<!DOCTYPE 根标签名 SYSTEM "DTD文件的位置">
网络引入:<!DOCTYPE 根标签名 PUBLIC "DTD文件的名字" "DTD文件的位置URL">1
2
3
4
5
6<!ELEMENT students (student+)>
<!ELEMENT student (name,age,gender)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="s001">
<name>张加林</name>
<age>20</age>
<gender>男</gender>
</student>
<student number="s002">
<name>张加林</name>
<age>20</age>
<gender>男</gender>
</student>
</students>1
2
3
4
5
6
7
8
9
10
11
12<?xml version="1.0" encoding="UTF-8" ?>
<!--直接引入-->
<!DOCTYPE students SYSTEM [
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,gender)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
]>Schema:复杂的约束技术,可以限定内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>1
2
3
4
5
6
7<a:根标签名 xmlns:itcast="xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd
http://www.itcast.cn/xml2 student2.xsd"
xmlns:a="http://www.itcast.cn/xml"
xmlns:b="http://www.itcast.cn/xml2">
<a:students >
<!--所有标签前面必须加a:(别名)-->- 填写xml文档的根元素
- 引入xml前缀,xmlns:xsi=”http://www.w3.org/2001/XMLschema-instance"
- 引入xsd文件命名空间 xsi:a=”http://www.itcast.cn/xml 文件名.xsd”
- 为每一个xsd约束声明一个前缀,作为标识,xmlns=”http://www.itcast/xml"
解析
解析:操作xml文档,将文档中的数据读取到内存中。
- 操作xml文档
- 解析(读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存到xml文档中。持久化存储。
- 解析xml的方式
- DOM:将标记语言文档一次性加载进内存,在内存中会形成一颗内存树
- 优点:操作方便,可以对文档进行CRUD的所有操作
- 缺点:占用内存严重
- SAX
- 逐行读取(读一行,内存释放上一行),基于事件驱动的。
- 优点:基本不占用内存
- 缺点:只能读取,不能增删改
- 服务器端使用DOM思想,移动端使用SAX思想
- DOM:将标记语言文档一次性加载进内存,在内存中会形成一颗内存树
- 常见解析器
- JAXP:SUN公司提供,支持DOM和SAX两种思想,但是一般不用,因为效果较差。
- DOM4J:一款优秀的解析器
- Jsoup:一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。提供了一套非常省力的API,可以通过DOM、CSS以及类似于jQuery的操作方法来取出和操作数据。
- PULL:Android操作系统内置的解析器,SAX方式。
Jsoup
- 使用步骤:
- 导入jar包
- 获取Document对象
- 获取对应的标签Element对象
- 获取数据下
灯火阑珊