xml解析--Jsoup快速入门
概念
Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
快速入门
步骤
-
导入jar包
jsoup-1.11.2.jar
-
获取Document
-
获取对应的标签Element对象
-
获取数据
package com.xml.jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
/**
* @author OldAZ-PC
* Jsoup快速入门
*/
public class JsoupDemo1 {
public static void main(String[] args) throws Exception {
//2.获取Document对象,根据xml文档来获取
//2.1 获取student。xml的路径
String path = JsoupDemo1.class.getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进入内存,获取dom树-->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//3.1获取第一个name的element对象
Element element = elements.get(0);
//3.2获取数据
String name = element.text();
System.out.println(name);
}
}
对象的使用
- Jsoup:工具类,可以解析html或者xml文档返回给Document对象。
- Document:文档对象,代表内存中的dom树
- Elements:元素Element对象的集合。可以当作ArrayList来使用
- Element:元素对象
- Node:节点对象
Jsoup对象
* parse:解析html或者xml文档,返回Document
* parse(File in,String charsetName) :解析html或者xml文件的
* parse(String html):解析xml或者html字符串的
* parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML和xml的文档对象
package com.xml.jsoup;
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.net.URL;
/**
* @author OldAZ-PC
* Jsoup对象功能
*/
public class JsoupDemo2 {
public static void main(String[] args) throws Exception {
//2.1 获取student。xml的路径
String path = JsoupDemo2.class.getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进入内存,获取dom树-->Document
// Document document = Jsoup.parse(new File(path), "utf-8");
// System.out.println(document);
//parse(String html):解析xml或者html字符串的
String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
" <students xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" \t\t\t xmlns=\"http://www.itcast.cn/xml\" \n" +
" \t\t xsi:schemaLocation=\"http://www.itcast.cn/xml student.xsd\"\n" +
" \t\t >\n" +
" \t<student number=\"xml_0001\">\n" +
" \t\t<name>tom</name>\n" +
" \t\t<age>18</age>\n" +
" \t\t<sex>male</sex>\n" +
" \t</student>\n" +
"\t<student number=\"xml_0002\">\n" +
" \t\t<name>mark</name>\n" +
" \t\t<age>18</age>\n" +
" \t\t<sex>female</sex>\n" +
" \t</student>\n" +
"\t\t \n" +
" </students>";
Document document = Jsoup.parse(str);
System.out.println(document);
//parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML和xml的文档对象
//代表网络中的资源路径
URL url = new URL("http://oldaz.top/");
Document document1 = Jsoup.parse(url, 10000);
System.out.println(document1);
}
}
Document对象
文本对象,代表内存中的dom树
功能:获取Element对象
getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
根据对应的属性名和属性值获取元素对象集合。
案例代码
xml:
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student number="xml_0001">
<name id ="id01">tom</name>
<age>18</age>
<sex>male</sex>
</student>
<student number="xml_0002">
<name>mark</name>
<age>18</age>
<sex>female</sex>
</student>
</students>
获取Elements对象
package com.xml.jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
/**
* @author OldAZ-PC
* Document/Element对象功能
*/
public class JsoupDemo3 {
public static void main(String[] args) throws Exception {
//1 获取student。xml的路径
String path = JsoupDemo2.class.getResource("student.xml").getPath();
//2.获取Document对象
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象
// 3.1获取所有的student对象
Elements elements = document.getElementsByTag("student");
System.out.println(elements);
System.out.println("----------getEleentsById-----------");
//3.2获取属性名为id的元素对象
Elements elements1 = document.getElementsByAttribute("id");
System.out.println(elements1);
System.out.println("--------------------");
//3.3获取number属性值为xml_0001的元素对象
Elements elements2 = document.getElementsByAttributeValue("number", "xml_0001");
System.out.println(elements2);
System.out.println("--------------------");
//3.4获取id属性值的元素对象
Element id01 = document.getElementById("id01");
System.out.println(id01);
}
}
Element对象
获取子元素对象
getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
根据对应的属性名和属性值获取元素对象集合。
获取属性值
String attr(String key):根据属性名称获取属性值
获取文本内容
String text():获取文本内容
String html():获取标签体的所有内容(包括子标签的字符串内容)
package com.xml.jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
/**
* @author OldAZ-PC
* Element对象功能
*/
public class JsoupDemo4 {
public static void main(String[] args) throws Exception {
//1 获取student。xml的路径
String path = JsoupDemo2.class.getResource("student.xml").getPath();
//2.获取Document对象
Document document = Jsoup.parse(new File(path), "utf-8");
/*
Element对象
获取子元素对象
getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
根据对应的属性名和属性值获取元素对象集合。
获取属性值
String attr(String key):根据属性名称获取属性值
获取文本内容
String text():获取文本内容
String html():获取标签体的所有内容(包括子标签的字符串内容)
*
* */
//通过document 对象获取name标签,获取所有的name标签 2个
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//通过Element对象获取子标签对象
System.out.println("---------------");
Element student_1 = document.getElementsByTag("student").get(0);
Elements stdent_1_name = student_1.getElementsByTag("name");
System.out.println(stdent_1_name.size());
//获取student对象的属性值
String number = student_1.attr("number");
System.out.println(number);
//获取文本内容,text只获取纯文本内容,html会获取标签
String text = stdent_1_name.text();
String html = stdent_1_name.html();
System.out.println(text);
System.out.println(html);
}
}
Node节点对象
是Document和Element的父类
主要是包含增删改的方法