XML
Extensible Markup Language:可扩展标记语言
可扩展:标签都是自定义的
功能和HTML区别
- 语法:
- xml文档后缀名为:.xml
- xml第一行必须定义文档声明
- xml文档中有且仅有一个根标签
- 属性值必须使用引号引起
- 标签必须正确关闭
- 便签区分大小写
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>ZhangSan</name>
<age>25</age>
<gender>male</gender>
</user>
</users>
- 组成部分:
- 文档声明
<?xml 属性列表 ?>
- 属性列表:
version
:版本号encoding
:编码方式standalone
:是否独立 yes | no
- 指令:结合CSS
- 标签:命名规则
- 属性:id属性值唯一
- 文本:CDATA区:该区域中的文本原样展示->
<![CDATA[...]]>
- 文档声明
- 约束:规定xml文档书写规则
- 分类:
- DTD:简单约束技术
- 引入dtd文档到xml文档中
- 内部dtd:将约束规则定义在xml文档中
- 外部dtd:将约束文档定义在外部dtd文件中
- 本地:
<!DOCTYPE 跟标签名 SYSTEM "dtd文件位置">
- 网络:
<!DOCTYPE 跟标签名 PUBLIC "dtd文件名" "dtd文件位置(URL)">
- 本地:
- 引入dtd文档到xml文档中
- Schema:复杂约束技术
- 引入:
- 填写xml文档的跟元素
- 引入xsi前缀:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 引入入xsd文件名空间:
xsi:schemaLocation="http://www.xxx.xxx/xxx" xxx.xsd
- 为每个xsd约束声明一个前缀作为标识:
xmlms="http://www.xxx.xxx/xxx"
- 引入:
- DTD:简单约束技术
- 分类:
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.harlan.cn/xml"
xsi:schemaLocation="http://www.harlan.cn/xml student.xsd">
</students>
- 解析:操作xml文档,将文档中的数据读取到内存中
- 操作xml文档
- 解析(读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存到xml文档中,持久化的存储
- 解析xml方式:
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗DOM树
- 优点:操作方便,可以对文档进行CRUD操作
- 缺点:占大量内存
- SAX:逐行读取,基于事件驱动
- 优点:不占内存
- 缺点:只能读取
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗DOM树
- 操作xml文档
- xml常见的解析器:
- JAXP:支持DOM,SAX
- DOM4J:支持DOM
- Jsoup:可解析HTML
- PULL:Android内置解析器,支持SAX
Jsoup解析器
- 快速入门:
- 导入jar包
- 获取Document对象
- 获取对应的标签
- 获取数据
//2.获取Document对象,根据xml文档获取//2.1获取xml文件路径
String path = Objects.requireNonNull(JsoupLearn.class.getClassLoader().getResource("student.xml")).getPath();
//2.2解析xml文档,加载文档进内存,获取DOM树
Document document = (Document) Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象
ElementElements elements = document.getElementsByTag("name");
//3.1获取第一个name的Element对象
Element element = elements.get(0);
//3.2获取数据
String name = element.text();
System.out.println(name);
- 对象的使用:
- Jsoup:工具类,可解析html文档或xml文档,返回Document
parse(File file);
-> 本地资源parse(URL url, int outtime);
-> 网络资源
- Document:文档对象,代表内存中的dom树
getElementsByTag(String name);
-> 根据标签获取元素对象getElementsByAttribute(String key);
-> 根据属性名称获取getElementByAttribute(String key, String value);
-> 根据属性值
- Elements:元素Element对象的集合
String attr(String key)
-> 根据属性名称获取属性值String test();
-> 获取文本内容String html();
-> 获取标签体的所有内容(包括子标签的字符串内容)
- Element:元素对象
- 同上
- Node:节点对象
- 是Document和Element的父类
- Jsoup:工具类,可解析html文档或xml文档,返回Document
- 快捷查询方式:
- Selector:选择器
select(String cssQuery)
- XPath:XPath为XML路径语言,用来确定XML文档中某部分的位置
- 使用Jsoup的XPath需要额外导入jar包
- Selector:选择器