- XML:Extensible Marked Language可扩展标记语言
1. 可扩展:
* 标签名称都是自定义
2. 功能:
* 存储数据:
1. 作为配置文件
2. 在网络中传输
3. xml和html的区别:
1. xml的标签是自定义的,hmtl的标签是预定义的
2. xml的语法严格,html语法松散
3. xml用于存储数据,html用于展示数据
- 语法格式:
1. 文档声明:必须定义在第一行顶格写
<?xml version='1.0' ?>
2. 基本语法:
* xml文档的后缀名为.xml
* xml文档第一行顶格写文档声明
* xml文档有且仅有一个根标签,像html中的<html></html>标签
* xml文档中的标签必须正确关闭,要么自闭和,要么成对存在
* xml文档标签严格区分大小写
3. 组成部分:
1. 文档声明
固定格式:
<?xml 属性列表 ?>
?问号和尖括号之间以及xml不能有空格
属性列表:
version:版本号 -- 必须属性
encoding:编码方式
-- 告诉解析引擎当前文档的字符集,如果不匹配,浏览器会报错
-- 默认为ISO-8859-1编码方式
standalone:独立属性
-- "yes"表示该文件不依赖于其他文件
-- "no"表示依赖其他文件
2. 指令
最早时候用来结合css控制样式的
3. 标签
自定义标签名称名称:
1. 不能以数字和标点符号开始
2. 不能以xml开始
3. 不能含有空格
4. 属性
属性由键值对构成,属性值用引号(单双都可)包裹
id属性值唯一,它代表一个元素的唯一标识
5. 文本:
* CDATA区:该区域内文本会被原样展示
格式:<![CDATA[ 需要原样展示的数据 ]]>
例如:
<![CDATA[ if(a < b && a > c) {} ]]>
正常情况下<,&&,>都要使用转义字符,放在CDATA区域后则不用
4. 约束:
a. 约束文档:用于规范xml文档的书写规则
b. 约束技术:
1. DTD:较为简单的约束技术
* <!ELEMENT 标签名 标签体内容>:定义标签名
* <!ATTRLIST 标签名 属性值名称 属性值类型>:定义属性
引入DTD约束:
1. 在xml文件中定义DTD约束:一般不使用
格式:
<!DOCUMENT 根标签名 [
//约束内容
]>
2. 在xml文件中引入外部定义的DTD文件:
* 引入本地的DTD文件
<!DOCUMENT 根标签名 SYSTEM "dtd文件路径">
* 引入网络上的DTD文件
<!DOCUMENT 根标签名 PUBLIC "dtd文件名" "dtd文件的完整url">
2. Schema:一种复杂的约束技术
能够具体约束到各个标签的内容,属性,属性值等
引入Schema约束文档:
1. 一对尖括号<>包裹
2. 先写根标签名称
3. 引入xsi前缀:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. 引入xsd文件命名空间:
xsi:schemaLocation="命名空间 xsd文件路径"
命名空间是为引入的xsd文件起的名称
5. 为每一个xsd约束文件取一个别名,只有一个时可以默认不取,用于区分访问哪个约束下的标签:
xmlns:别名="命名空间"
使用:
<别名:标签名></别名:标签名>
- 操作xml文档
1. 操作xml文档:
a. 解析xml文档:将文档内容读取到内存中
b. 写入xml文档将内存中的数据保存到xml文档中
2. 解析xml方式:
a. DOM树:将文档一次性加载进内存,形成一棵DOM树
* 优点:
操作方便,可以对文档进入CRUD的所有操作 -- 适用于服务器端
* 缺点:
文档转化为DOM树非常占内存
b. SAX:逐行读取,每读新一行,释放内存中的前一行。基于事件驱动(遇到开始标签事件)。
* 优点:
不占内存 -- 适用于移动端
* 缺点:
只能读取,不能增删改
2. 常见解析器:
a. JAXP:sun公司提供,支持dom和sax两种方式 -- 但是并不好用
b. DOM4J:
c. Jsoup:是一款java的html解析器。通过DOM,css和类似jQuery的操作方式来读取和擦做数据
d. PULL:Android内置解析器,sax方式
3. Jsoup解析器:Jsoup对象为一个工具类
a. 使用步骤:
1. 导入jar包:
jsoup-1.11.2.jar
2. 获取document对象:文档对象。代表内存中的dom树
* 根据xml文档获取:
Document Jsoup.parse(File in, charseName encodingName);
-- 参数传入xml文件对象,指定字符集为xml文档字符集
-- 函数返回一个document对象
* 根据xml或html字符串获取
Document Jsoup.parse(String str);
-- str为xml或者html文档内容的字符串形式
* 根据网络资源获取
Document Jsoup.parse(URL url, int timeoutMillis);
-- 通过网络路径获取指定的xml文档
-- URL url = new URL("url连接");
-- 网络资源方式多用于爬虫解析
3. 通过document成员方法获取元素Element对象:
* 成员方法返回的如果时Elementss对象,则表示是Element对象的ArrayList集合
* Document对象继承自Element对象,所以继承了其获取元素的成员方法
* getElementsByTag(String tagName);//依据标签名称获取元素对象集合
* getElementsByAttribute(String attrName);//依据属性名获取元素对象集合
* getElementById(String id_value);//依据id属性值获取指定元素
4. 通过Element对象的成员方标签内的数据
* 获取子元素对象:
由于Document对象继承自Element对象,所以也有相同获取子元素对象的方法
* 获取属性值:
String attr(String key);//依据属性名称获取属性值
* 获取文本内容:
String text();//获取标签和子标签内的纯文本内容
String html();//获取标签体的所有内容(包括子标签标签文本)
b. Node:节点对象
Document对象和Element对象的父类
c. 快捷索引标签:
1. selector:选择器
* 使用方法:
Elements select(String cssQuery);
* 选择器筛选语法cssQuery需要查看selector类中的定义
2. XPath:xml路径语言
* 使用Jsoup的XPath需要额外导包:
JsoupXpath-0.3.2.jar
* 该jar包是使用Jsoup来获取document对象,然后使用XPath方法来选取元素
1. 首先使用Jsoup获取document对象
2. 创建JXDocument对象:
JXDocument jxDocument = new JXDocument(document);
3. 结合XPath语法查询:
List<JXNode> selN(String xpath);
JXNode selNOne(String xpath);
List<Object> sel(String xpath);
Object selOne(String xpath)
* xpath语法参考w3cshool手册即可