XML是一种语法严格的储存数据的可扩展标记语言.
XML的基本语法
- xml文档的后缀名为.xml
- xml文档的第一行必须是文档声明
- xml文档中的标签必须正确关闭.
- xml文档严格区分大小写.
XML的组成部分
文档声明
- version:版本信息,最常用的是1.0版本.
- standalone:是否独立 取值yes,不依赖其他文件,no依赖其他文件.
- encoding:文件编码方式
自定义标签
- 标签可以由字母数字及其他字符组成,但不能以数字或者标点符号开头,不能包含字母XML,不能包含空格.
属性
- 属性值唯一
文本
- CDATA区,在该区的数据原样展示.
1 | <?xml version='1.0' ?> |
XML的约束
约束是规定XML文档文本规范方式的一种书写规则.
- DTD约束
- 内部DTD:将XML文件的约束规则定义在文本内部
- 外部DTD:将XML的约束规则定义在外部的dtd格式文档,再在文件中引用.
- 本地DTD:
- 网络DTD:
- Schema约束
- 引入Schema约束:
1.填写xml文档的根元素 2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd" 4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml" * 因为如果文本需要引用多种约束时,每处使用的约束不同,需要在使用时区分.
- 引入Schema约束:
1 | <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
解析XML文档
- 解析xml的方式:
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD的所有操作
- 缺点:占内存
- SAX:逐行读取,基于事件驱动的。(安卓/内存小的机器使用)
- 优点:不占内存。
- 缺点:只能读取,不能增删改
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- xml常见的解析器:
1.导入Jsoup jar包
2.添加到Module Library工作区域
3.开始引用
- 获取XML文档路径
1 | String XMLpath = Jsoup.class.getClassLoader().getResource("data.xml").getPath(); |
- 获取Document对象,解析xml文件,加载进内存
- parse()方法,解析文件方法
1 | Document docu = org.jsoup.Jsoup.parse(new File(XMLpath),"utf-8"); |
- 获取元素对象,该方法返回一个集合,集合内部是返回的元素.
1 | Elements elements = document.getElementsByTag("name"); |
- 获取元素的信息
- text():获取元素信息,仅文本
1
String names = elms.text();
- text():获取元素信息,仅文本
Jsoup对象的使用
- Jsoup:工具类
- Document:文档对象
- getElementById(String id):根据ID属性值获取对象,在主栏中寻找
- getElementsByTag(String tagName):根据标签名称获取元素对象,返回一个集合
- getElementsByAttribute(String key):根据属性名称获取元素对象,返回一个集合.
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象,返回一个集合
1 | <user id='1' > |
1 | String XMLpath = Jsoup.class.getClassLoader().getResource("data.xml").getPath(); |
- Element:元素对象
- 获取子元素对象
- getElementById(String id):根据id属性值获取唯一的element对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
- 获取属性值
- String attr(String key):根据属性名称获取属性值
- 获取文本内容
- text():获取文本内容,仅文字
- String html():获取html文本
- 获取子元素对象
- Node:节点对象
- 使用的方法:Elements select(String cssQuery)
- 获取student.xml的path
1 | String XMLpath = Jsoup.class.getClassLoader().getResource("data.xml").getPath(); |
- 获取Document对象
1 | Document docu = org.jsoup.Jsoup.parse(new File(XMLpath),"utf-8"); |
- 根据获取到的Document对象创建JXDocument对象
1 | JXDocument jxDocument = new JXDocument(docu); |
查询所有student标签
- 查询主标签
1 | List<JXNode> jxNodes = jxDocument.selN("//user"); |
- 查询主标签下的标签
1 | List<JXNode> jxNodes = jxDocument.selN("//user/name"); |
- 查询主标签下的属性值(如id属性)
1 | List<JXNode> jxNodes = jxDocument.selN("//user[@id]"); |
- 总结:使用Xpath方式查询,主标签前两个斜杠,细分小标签再加一个斜杠,查询到属性时,加中括号,括号内写@属性名,具体查询时,再指定属性名=多少即可.