XML
概念
Extensible Markup Language 可扩展标记语言。可扩展是指标签可以自定义。
功能:
- 配置文件。
- 在网络中传输数据。
- 存储数据。
XML与HTML的区别:
w3c:万维网联盟,创建于1994年,是Web技术领域的技术标准机构。
- XML的标签都是自定义的,HTML标签是预定义的。
- XML依法严格,HTML语法松散。
- XML是存储数据的,HTML是展示数据的。
语法
基本语法
第一行必须是文档声明。
<?xml version='1.0' ?>
属性
version:版本号,固定为1.0 。
encoding:指定文档的码表。
standalone:文档是否独立,yes或no。如果是yes则表示这个XML文档时独立的,不能引用外部的DTD规范文件。如果是no则可以用外部的DTD文档。(很少用)
xml文档有且只有一个根标签。
属性值必须使用引号引起来。
标签必须正确关闭。
xml标签名称区分大小写。数字不能开头。
使用
<![CDATA[数据内容]]>
以转义。
快速入门
1 |
|
组成部分
文档声明
格式:
<?xml 属性列表 ?>
属性列表:
version:版本号,必须的属性。
encoding:编码方式,告知解析引擎当前文档使用的字符集,默认为ISO-8859-1。
standalone:是否独立,取值为yes或no,表示这个文档是否依赖其他文件。
指令:结合CSS的
<?xml-stylesheet type="text/css" href="a.css" ?>
标签:标签名称自定义的。数字不能开头,名称不能以xml开始,名称不能包含空格,可以包含数字,字母和其他字符。
属性:id属性值唯一。
文本:特殊字符要用转义字符。在CDATA区中的数据会被原样展示。
<![CADTA[数据]]>
约束
规定xml文档的书写规则。作为框架的使用者,我们应当可以做到在xml中引入约束文档,能够读懂约束文档。
分类
- DTD:一种简单的约束技术。
- Schema:一种复杂的约束技术。
DTD
1 | <?xml version="1.0" encoding="utf-8"?> |
引入dtd文档到xml文档中
- 内部dtd:将约束文件规则定义在xml文档中。
- 外部dtd:将约束的规则定义在外部的dtd文件中。
- 本地:
<DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
- 网络:
<DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
- 本地:
1 |
|
Schma
引入:
- 填写xml文档的根元素。
- 引入xsi的前缀,
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 引入xsd文件命名空间,
xsi:chemaLocation="http://www.itcast.cn/xml student.xsd"
- 为每一个xsd约束声明一个前缀,作为标识
xmlns="http://www.itcast.cn/xml"
1 | <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
XML解析
操作xml文档
- 解析(读取):操作xml文档,将文档中的数据存到内存中。
- 写入:将内存中的数据保存到xml文档中。持久化的存储。
解析xml的方式
- DOM:将标记语言文档一次性加载进内存,形成一棵DOM树。
- 优点:操作方便,可以对文档进行CRUD的所有操作。
- 缺点:消耗内存。
- SAX:逐行读取,基于事件驱动的。
- 优点:不占内存。
- 缺点:只能读取,不能增删改。
xml常见的解析器
- JAXP:sun公司提供的解析器,支持dom和sax,慢。
- DOM4J:一款优秀的解析器。
- Jsoup:是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数值。
- PULL:Android内置的解析器,sax方式。
Jsoup
是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数值。
快速入门:
- 步骤:
- 导入jar包。
- 获取Document对象。
- 获取对象的标签。Element对象。
- 获取数据。
1 | // 根据xml文档获取 |
对象的使用:
Jsoup:工具类,可以解析html或xml文档,返回Document。
parse:解析html或xml对象,返回Document。
parse(File in, String charsetName)
:解析html或xml的。paese(String html)
:解析html或xml字符串。指的是把文档内容装化成字符串作为参数传进来。parse(URL url, int timeoutMillis)
:通过网络路径获取指定的html或xml文档对象。
Document:文档对象。代表内存中的dom树。继承自Element对象。
获取Element对象
getElementById(Strinf id)
:根据id属性值获取唯一元素对象。getElementsByTag(String TagName)
:根据标签名获取元素对象集合。getElementsByAttribute(String key)
:根据属性名获取元素对象集合。getElementsByAttributeValue(String key, String value)
:根据对应的属性名和属性值获取元素对象集合。
Elements:元素Element对象的集合。可以当作
ArrayList<Element>
来使用。
Element:元素对象。
获取子元素对象:
getElementById(Strinf id)`:根据id属性值获取唯一元素对象。
getElementsByTag(String TagName)
:根据标签名获取元素对象集合。getElementsByAttribute(String key)
:根据属性名获取元素对象集合。getElementsByAttributeValue(String key, String value)
:根据对应的属性名和属性值获取元素对象集合。获取属性值:
String attr(String key)
:根据属性名称获取属性值。
获取文本内容:
String text()
:获取所有子标签的纯文本内容。String html()
:获取标签体的所有内容(包括子标签的标签和文本内容)。
Node:节点对象。
快捷查询方式:
select:选择器
使用的方法:
Elements select(String cssQuery)
语法:参考Selector类中定义的语法。
select("student[number=\"001\"]" > age)
number为shudent的属性,>表示age是student的直接子标签,”a b”表示b是a的子标签或孙标签。
XPath:XML路径语言 ,他是一种用来确定XML文档中某部分位置的语言。
- 使用Jsoup的Xpath需要额外导入jar包。JsoupXpath-版本号.jar
//student
:查询所有的student标签。//student/name
:查询所有的student下的name标签。//student/name[@id]
:查询带有id属性的name标签。//student/name[@id='001']
:查询id属性为001的name标签。
DOM4J
1 | // books.xml |
1 | public void test1() throws Exception{ |
打印结果:
1 | 100 |
XPath
专门用于查询,它定义了一种规则。
//nodename 选取此节点
/ 从根节点选取
.. 选取此节点的父节点
@ 选取属性
[@属性名] 属性过滤
[标签名] 子元素过滤
1 | public void test() throws Exception{ |
修改节点保存
1 | public void test1() throws Exception{ |