XML
XML
XML
XML也是一门标记语言
了解
- 概念
Extensible Markup Language 可扩展标记语言
可扩展:标签都是自定义的
- XML的发展历程
w3c(万维网联盟)创建了这两个语言,最早出现了HTML,由于浏览器之间的竞争,HTML发展的缓慢,w3c一度想要放弃HTML,想要用XML来替代HTML,当时XML比HTML语法严谨外没有功能拓展,也不受青睐
最后XML走了另一条路,成为了配置文件的内容
例如properties如此存数据
1 | name = zhangsan |
但是XML更加清晰
1 | <user> |
- XML与HTML的区别
- XML标签自定义,HTML标签预定义
- XML语法严格,HTML松散
- XML存储数据,HTML展示数据
- 功能
- 配置文件
- 在网络中传输
语法
基本语法
- 文档后缀名
.xml
- 文档声明必须写且必须顶第一行写
- 必须有根标签
- 属性必须使用引号引起,单双都可以
- 标签随意定义,但必须闭合
- 标签区分大小写
快速入门
1 |
|
组成部分
- 文档声明
- 格式
<?xml 属性列表 ?>
- 属性列表
- version 版本号,必须的属性,写1.0即可
- encoding 编码方式,告知解析引擎当前文档使用的字符集,默认
ISO-8859-1
- standalone 是否依赖其他文件,取值有yes和no
- 格式
- 指令(了解)
1
1
2
3name{
color: red;
} - 标签
命名规则
1. 名称不能以数字或符号开头
2. 名称不能以xml开始
3. 名称不能有空格
约定XML文档的书写规则,用来给框架程序解析,也用来给程序员约定书写规范
作为框架的使用者的我们
只需要
- 简单的读懂
- 会引用
分类:
- DTD:一种简单的约束技术
- Schema:复杂的约束技术
DTD
引入DTD文档到XML文档中
分两种
- 内部dtd :将约束规则定义在xml文档中
- 外部dtd :将约束的规则定义在外部的dtd文件中
- 本地:
<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
- 网络:
<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
- 本地:
dtd文档
1 | <!--dtd文档--> |
xml文档
1 |
|
Schema
dtd虽然简单,但是有着诸多问题,比如它并不能规定文本的内容
Schema解决了这个问题
后缀名 .xsd
xsd文档读懂注释处即可
1 |
|
xml文档
1 |
|
解析
操作xml文档,将文档的数据读取到内存中
操作XML文档
- 解析(读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存到XML中,持久化的存储
- 解析XML的方式
DOM:将标记语言一次性载入内存中,在内存中形成一个DMO树
- 优点:操作方便,可以对文档进行CRUD的所有操作
- 缺点:消耗内存
- 服务器端
SAX:逐行读取,基于事件驱动
- 优点:占内存十分小
- 缺点:只能读取,不能增删改
- 移动端使用
- XML常见的解析器
- JAXP:sun公司提供的解析器,支持DOM和SAX两种思想,性能差,了解
- DOM4J:一款优秀的解析器
- Jsoup:可以使用类似于JQuery的方式来解析
- Pull:Android操作系统内置的解析器,sax方式
Jsoup快速入门
快速入门:
步骤
- 导入jar包
- 获取Document对象
- 获取对应的标签
1 | //2. 获取Document对象,根据xml文档来获取 |
- Jsoup是一个工具类,可以解析html文档或者xml文档,返回Document对象
- parse方法:解析html或xml文档,返回Document
parse(File in,Stirng charsetName)
:解析xml或html文件parse(String html)
解析html字符串parse(URL url,int timeoutMillis)
通过网络来获取html文件
- parse方法:解析html或xml文档,返回Document
- Document:文档对象,代表内存中的Dom树
- 获取Element对象
getElementsByTag(String tagName)
:根据标签名称获取元素对象集合getElementsByAttribute(String key)
根据属性名称获取元素对象集合getElementsByAttributeValue(String key,String value)
根据对应的属性名和属性值获取元素对象的集合getElementsById(String id)
通过id属性值获取唯一的element对象
- 获取Element对象
- Elements,元素Elements对象的集合,可以当做ArrayList集合来使用
- Element元素对象
- 也可以获取Element对象 - `getElementsByTag(String tagName)`:根据标签名称获取元素对象集合 - `getElementsByAttribute(String key)`根据属性名称获取元素对象集合 - `getElementsByAttributeValue(String key,String value)`根据对应的属性名和属性值获取元素对象的集合 - `getElementsById(String id)`通过id属性值获取唯一的element对象
- 获取属性值
String attr(String key)
根据属性名称获取属性值
- 获取文本内容
String text()
获取所有标签的纯文本内容String html()
获取标签体的所有内容(包括子标签的标签和文本内容)
- 获取属性值
- Node节点对象
- 是Document和Element元素的父类
Jsoup选择器查询
快捷查询方式:
- selector:选择器的方式
使用的方法:Elements select(String sccQuery)
语法是css的选择器语法,参考文档中selector类
- XPath : XML路径语言,确定XML文档中某部分位置的
语法:参考
需要额外导入一个jar包
1 | public static void main(String[] args) throws IOException, XpathSyntaxErrorException { |