1、解析:将xml文档 数据读取到内存中
2、写入:将数据写入xml
优点:可以像Dom树一样,对文档进行 curd
缺点:因为一次性加载全部加载,占内存很大
SAX:逐行读取,(读一行,释放前面一行)基于事件驱动的。
优点:不占内存。
缺点:只能读取,不能增删改。
总结:服务端:适合DOM。移动端:内存较小,适合SAX
JAXP:sun公司提供的解析器,支持dom和sax两种思想,官方,性能较烂。
DOM4j:一款非常优秀的解析器,非官方,但是性能更好
jsoup:是一款Java的html解析器,可直接解析某个URL地址、HTML文本内容,他提供了一套非常省力的API。
PULL:Android 操作系统内置解析器。基于sax方式
老规矩 maven依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>然后开始写代码吧
这里自己创建一个.xml 文件 源码如下
<?xml version="1.0" encoding="UTF-8" ?>
<!--
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"
-->
<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">
<student number="persion1">
<name>tom</name>
<age>18</age>
<sex>male</sex>
</student>
<student number="persion2">
<name>lucy</name>
<age>30</age>
<sex>female</sex>
</student>
</students>创建好了,那就获取绝对路径 填入下面吧
@Test
public void JsoupDemo1() throws IOException {
Document parse = Jsoup.parse(new File("文件位置\\student.xml"), "utf-8");
Elements name = parse.select("name"); //查询所有 name 标签集合
Element element = name.get(0); // 获取 第一个 name 标签
String text1 = element.text();// 将其转为String
System.out.println(text1); // tom
Elements age = parse.select("age"); //查询所有age标签
String text2 = age.get(1).text(); //将第2个 age 标签1 并转为 String
System.out.println(text2); // 30
}Node:节点对象
案例代码2
将XML 内容替换一下
<?xml version="1.0" encoding="UTF-8" ?>
<!--
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"
-->
<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">
<student number="persion1">
<name>tom</name>
<age id="888">18</age>
<sex>male</sex>
</student>
<student number="persion2">
<name>lucy</name>
<age>30</age>
<sex>female</sex>
</student>
</students>代码如下:
@Test
public void JsoupDemo2() throws IOException {
Document parse = Jsoup.parse(new File("D:\\GovBuy\\1688\\src\\main\\resources\\student.xml"), "utf-8");
Elements elementsByTag = parse.getElementsByTag("name");
/**
* <name>
* tom
* </name>
* <name>
* lucy
* </name>
*/
Elements elementsByAttribute = parse.getElementsByTag("name"); // 获取所有名为 name 的 标签。
/**
* <name>
* tom
* </name>
* <name>
* lucy
* </name>
*/
Element elementById = parse.getElementById("888");
/**
* <age id="888">
* 18
* </age>
*/
Elements elementsByAttributeValue = parse.getElementsByAttributeValue("number","persion2");
/**
* <student number="persion2">
* <name>
* lucy
* </name>
* <age>
* 30
* </age>
* <sex>
* female
* </sex>
* </student>
*/
Elements elementsByAttributeValue1 = parse.getElementsByAttributeValue("id","888"); // 这里等价于 getElementById("888");
/**
* <age id="888">
* 18
* </age>
*/
}具体玩法,需要根据XML 、HTML形式处理。
完结!
讲解一下 从Youtube网站上 https://www.youtube.com/watch?app=desktop&v=wzh5TCVnWZQ 看到的Jsoup
爬取 人家连接的超链:
@Test
public void Ahref() throws IOException {
// 获取到DOM树
Document parse = Jsoup.parse(new URL("https://www.baidu.com"),10000);
// 获取到元素集合
Elements elements = parse.select("a");
// 遍历元素集合
for (Element element : elements) {
// 输出 元素中 属性为"href" 的属性值
System.out.println(element.attr("href"));
};
}间接 等价于
@Test
public void AhrefByTag() throws IOException {
// 获取到DOM树
Document parse = Jsoup.parse(new URL("https://www.baidu.com"),10000);
// 获取到元素集合
Elements elements = parse.getElementsByTag("a");
// 遍历元素集合
for (Element element : elements) {
// 输出 元素中 属性为"href" 的属性值
System.out.println(element.attr("href"));
};
}有点不明白
parse.select("a[href]"); 等价于 Elements elements = parse.select("a");特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!