一、概念
1、概念:
XML英文全程 Extensible Markup Language 可扩展标记语言,可扩展是什么意思呢,可扩展代表我们可以自己定义标签,如<student></student>标签。
2、功能:
XML 被设计用来传输和存储数据
3、应用:
xml可以当做配置文件、可以在网络中传输
4、XML与HTML的区别
- XML 被设计用来传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
- XML 标签都是自定义的,HTML标签是预定义。
- XML 的语法严格,HTML语法松散。
二、语法
1、基本语法
- xml文档的后缀名 .xml。
- xml第一行必须定义为文档声明。
- xml文档中有且仅有一个根标签。
- 属性值必须使用引号(单双都可)引起来。
- 标签必须正确关闭。
- xml标签名称区分大小写。
2、快速入门,XML实例
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
3、一个XML文档的组成部分
- 文档声明:
1、文档声明的格式: <?xml 属性列表 ?>
2、属性:文档声明中的属性有:
(1)version:版本号,他是必须要写的属性
(2)encoding:字符集编码,他用来告知解析xml的时候用什么字符集进行 解码不是必须的属性,如果不写默认是ISO-8859-1。
(3) standalone:是否独立,有两个取值,当是true,代表不依赖其他文件,当是false的时候代表依赖其他文件。
- 指令(了解即可,结合css使用)
1、指令的格式为:<?xml-stylesheet type="text/css" href="a.css" ?>
- 标签
1、标签就是我们自定义的,比如<user></user>、<student></student>
- 属性
1、属性就是我们用来说明有关元素的额外信息的,例如<user age=‘20’></user>,age='20’就是属性。 属性值必须被单引号或者双引号括起来,不然会报错
- 文本:
1、文本就是标签里的,比如<user>张三</user>,张三就是文本,有时候我们可能会用到一些特殊字符,那么我们就可以使用 CDATA区:在该区域中的数据会被原样展示
* 格式: <![CDATA[ 数据 ]]>
4、约束
1、约束:规定xml文档的书写规则。
2、约束的分类:
DTD:一种简单的约束技术。
Schema:一种复杂的约束技术。
5、DTD
1、DTD是一种约束文档,如果我们要使用DTD约束文档,我们需要引入DTD文档。
2、根据DTD格式分类:
2.1、内部DTD:将约束规则定义在xml文档中
2.2、外部DTD: 将约束的规则定义在外部的dtd文件中
2.2.1、本地DTD:dtd文件在本地
2.2.2、 网络DTD:dtd文件在网络中
3、引入dtd文档
3.1、如果引入本地dtd文档格式为:<!DOCTYPE 根标签名 SYSTEM “dtd文件的位置”>
3.2、引入网络中的dtd文档的格式为:<!DOCTYPE 根标签名 PUBLIC “dtd文件名字” “dtd文件的位置URL”>
3.3、内部引入:<!DOCTYPE 根标签名 [dtd规则]>
6、Schema
1、引入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”
2、例如:
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/xml"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">
三、解析
1、什么叫做解析:
xml的解析就是将xml文档的数据读取到内存中
2、解析的两种思想
2.1、DOM思想:DOM思想就是把xml文档全部加载到内存中,形成一颗树的形状,例如下图所示
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
2.2、SAX思想:逐行读取,基于事件驱动的。
3、两种解析思想的优缺点
3.1、DOM思想
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占用内存
3.2、 SAX思想:
优点:不占内存
缺点:只能读取,不能进行其他操作
4、XML常见的解析器
4.1、 JAXP:sun公司提供的解析器,支持dom和sax两种思想
4.2、DOM4J:一款非常优秀的解析器
4.3、 Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
4.4.、PULL:Android操作系统内置的解析器,sax方式的。
四、Jsoup解析器的使用
1、jsoup快速入门
1.1、首先下载jar包,jsop的maven依赖坐标
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.2</version>
</dependency>
1.2、获取Document对象
1.3、获取element对象
1.4、获取元素值
1.5、代码实例
public class JsoupTest {
public static void main(String[] args) throws IOException {
//1获取student.xml的path
String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
//2解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象 Element
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//4获取第一个name的Element对象
Element element = elements.get(0);
//5获取数据
String name = element.text();
System.out.println(name);
}
}
2、jsoup中常用的对象和方法
2.1、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的文档对象
2.2、Document对象:文档对象。代表内存中的dom树,用来获取Element对象,常用的方法有:
- getElementById(String id):根据id属性值获取唯一的element对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
2.3、Elements:元素Element对象的集合。可以当做 ArrayList来使用
2.4、Element对象,常用的方法分为三类;
2.4.1、获取子元素对象
- getElementById(String id):根据id属性值获取唯一的element对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
2.4.2、获取属性值
- String attr(String key):根据属性名称获取属性值
2.4.3、获取文本内容
- String text():获取文本内容
- String html():获取标签体的所有内容(包括字标签的字符串内容)