XML
xml
1.概念
1.1概念
语法严格
Extensible Markup Language 可标记语言
- 可拓展:标签都是自定义的
1.2功能
1.存储数据
2.配置文件
3.在网络上传输
1.3xml和html区别
- 同属于w3c联盟
1.xml 标签都是自定义的,html标签是预定义
2.xml的语法严格,html语法松散
3.xml是存储数据的,html是展示数据的
2.语法:
2.1基本语法:
1.xml文档后缀名.xml
2.xml第一行必须定义为文档声明
3.xml文档中有且只有一个根标签
4.属性值必须使用引号(单双都可以)引起来
5.标签必须正确关闭
6.区分大小写
<?xml version='1.0'?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
组成部分
-
文档说明
-
格式:
-
属性列表:
- version:版本号,必须属性
- encoding:编码方式,告知解析器殷勤当前文档使用的字符集,默认ISO-8859-1
- standalone:是否独立
- yes:不依赖其他文件
- no:依赖其他文件
-
-
指令(了解):结合css的
-
标签:标签名称自定义
- 规则:
- 名称可以包含字母,数字以及其他的字符
- 名称不能以数字或者标点开始
- 名称不能以字母,xml等开始
- 名称不能包含空格吧
- 规则:
-
属性
- ID属性值唯一
-
文本
- CDATA区:再改区域中的数据会被原样展示
- 格式:
- CDATA区:再改区域中的数据会被原样展示
3.约束
3.1介绍
规定xml文档的书写规范
- 作为框架的使用者(程序员)
- 能够在xml中引入约束文档
- 能够简单的读懂约束文档
- 分类
- DTD:一种简单的约束技术
- Schema:一种复杂的约束技术
3.2 DTD
样例
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
- 引入到dtd文档
- 内部dtd:将约束规则定义在xml文档中
- 外部dtd:将约束规则定义在外部的dtd文件中
- 本地:
- 网络:
3.3 Schema
- 引入:
-
- 填写xml文档的根元素
-
- 引入xsi前缀 xmlns:xsi="http://www.w3.org.2001.XMLSchema-instance"
-
- 引入xsd文件命名空间 xsi:SchemaLocation="http://www.itcast.cn/xml student.xsd"
-
- 为每一个xsd约束声明一个前缀,作为标识, xmlns="http://www.itcast.cn/xml"
-
<student xmlns:xsi="http://www.w3.org.2001.XMLSchema-instance"
xmlns="http://www.itcast.cn/xml"
xsi:SchemaLocation="http://www.itcast.cn/xml student.xsd"
4.解析
将文档中的数据读取到内存中
4.1 操作xml文档
- 解析(读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存在xml中,持久化的储存
4.2 解析xml的方式
DOM
将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD的所有操作
- 缺点:占内存
SAX
逐行读取,基于事件驱动
- 优点:不占内部
- 缺点:只能读取不能增删改查
5. DOM使用
5.1 实例
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.io.IOException;
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
Elements Elements = document.getElementsByTag("name");
Element element = Elements.get(0);
System.out.println(element.text());
}
}
5.2 对象介绍
-
Jsoup:工具类,可以解析html或者xml文档,返回Document
- parse:解析html或xml文档,返回Document
- parse(File in, String charsetName):解析xml或者html文件的
- parse(String html):解析xml或html字符串
- parse(URL url,int timeoutMillis):通过网络路径获取指定html或xml的文档对象
- parse:解析html或xml文档,返回Document
-
Document:文档对象,代表内存中的dom树
- 获取Element对象
- getElementById(String id);
- getElementByTag(String tagName);根据标签名称获取元素对象集合
- getElementByAttribute(String key):根据属性名称获取元素对象集合
- getElementByAtttibuteValue(String key, String value);根据对应属性名和属性值获取元素对象集合
- 获取Element对象
-
Elements:元素Element对象集合,可以当做ArrayList
来使用 -
Element:元素对象
- 获取子元素对象
- getElementById(String id);
- getElementByTag(String tagName);根据标签名称获取元素对象集合
- getElementByAttribute(String key):根据属性名称获取元素对象集合
- getElementByAtttibuteValue(String key, String value);根据对应属性名和属性值获取元素对象集合
- 获取属性值
- String attr(String key);根据属性名称获取属性值
- 获取文本内容
- String text();获取文本内容
- String html():获取标签体内的所有内容
- 获取子元素对象
-
Node:节点对象
- 是Document和Element的父类
5.3 快速查询方式
- selector:选择器
- 使用的方法:Elements selector(String cssQuery)
- 语法:参考Selector类中定义的语法
- XPath:XPath即为XML路径语言,他是一种用来确定xml(标准通用标记语言的子集)文档只能中的某部分位置的语言
- 使用Jsoup的Xpath需要额外导入jar包
- 查询W3cshool参考手册,使用Xpath的语法完成查询