XML解析器(一)Jsoup
目錄
Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。
Jsoup解析步驟
1,匯入JAR
2,解析XML檔案
A,得到解析檔案的路徑:類載入器載入檔案的路徑
B,構建一個FILE物件
C,呼叫JSOUP的PARSE方法解析XML檔案得到一個DOCUMENT物件
D,呼叫Document的相關方法得到相關的標籤物件(Element)
Elements:就是一個存了Element物件的ArrayList集合
E ,呼叫Element的相關方法得到想要的資料
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <students> <student number="0001"> <name id="itcast">tom</name> <age>18</age> <sex>male</sex> </student> <student number="0002"> <name>jack</name> <age>18</age> <sex>female</sex> </student> </students>
package 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.io.IOException; /** * xml_解析_Jsoup_快速入門 * <p> * 步驟: * 1,匯入JAR * 2,解析XML檔案 * A,得到解析檔案的路徑:類載入器載入檔案的路徑 * B,構建一個FILE物件 * C,呼叫JSOUP的PARSE方法解析XML檔案得到一個DOCUMENT物件 * D,呼叫Document的相關方法得到相關的標籤物件(Element) * Elements:就是一個存了Element物件的ArrayList集合 * E ,呼叫Element的相關方法得到想要的資料 */ public class JsoupDemo1 { public static void main(String[] args) throws IOException { //1.獲取xml解析檔案的路徑 String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml" ).getPath(); //2.解析xml文件,載入文件進記憶體,獲取document物件 Document document = Jsoup.parse(new File( path ),"UTF-8"); //3.獲取元素物件Element,返回值是存了Element物件的ArrayList集合 Elements name = document.getElementsByTag( "name" ); //4.獲取第一個name的Element物件 Element element = name.get( 0 ); //5.獲取資料 String text = element.text(); System.out.println(text); } }
Jsoup物件使用
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的文件物件
package jsoup;
/**
* Jsoup物件功能
*/
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class JsoupDemo2 {
public static void main(String[] args) throws IOException {
//獲取xml解析檔案的路徑
String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
//1.解析xml文件,載入文件進記憶體,獲取document物件
Document document = Jsoup.parse(new File( path ),"UTF-8");
//2.parse(String html):解析xml或HTML字串
String str="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
"\n" +
"<students>\n" +
"\t<student number=\"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=\"0002\">\n" +
"\t\t<name>jack</name>\n" +
"\t\t<age>18</age>\n" +
"\t\t<sex>female</sex>\n" +
"\t</student>\n" +
"</students>";
Document document1 = Jsoup.parse( str );
// System.out.println(document1);
//3.parse(URL url ,int timeoutMillis):通過網路路徑獲取指定的HTML或xml文件物件
URL url=new URL("https://mp.csdn.net/postedit/82555583");
Document document2 = Jsoup.parse( url,10000);
// System.out.println(document2);
}
}
2. Document:文件物件。代表記憶體中的dom樹
* 獲取Element物件
* getElementById(String id):根據id屬性值獲取唯一的element物件
* getElementsByTag(String tagName):根據標籤名稱獲取元素物件集合
* getElementsByAttribute(String key):根據屬性名稱獲取元素物件集合
* getElementsByAttributeValue(String key, String value):根據對應的屬性名和屬性值獲取元素物件集合
package jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.File;
import java.io.IOException;
/**
*Document/Elements物件
*/
public class JsoupDomo3 {
public static void main(String[] args) throws IOException {
String path = JsoupDomo3.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
Document document = Jsoup.parse( new File( path ), "UTF-8" );
//1.獲取所有的student物件
Elements student = document.getElementsByTag( "student" );
System.out.println(student);
System.out.println("========================");
//2.獲取id屬性的元素物件
Elements id = document.getElementsByAttribute( "id" );
System.out.println(id);
System.out.println("========================");
//3.根據id屬性值獲取唯一的element物件
Elements value = document.getElementsByAttributeValue( "id", "itcast" );
System.out.println(value);
}
}
3. Elements:元素Element物件的集合。可以當做 ArrayList<Element>來使用
4. Element:元素物件
1. 獲取子元素物件
* getElementById(String id):根據id屬性值獲取唯一的element物件
* getElementsByTag(String tagName):根據標籤名稱獲取元素物件集合
* getElementsByAttribute(String key):根據屬性名稱獲取元素物件集合
* getElementsByAttributeValue(String key, String value):根據對應的屬性名和屬性值獲取元素物件集合
2. 獲取屬性值
* String attr(String key):根據屬性名稱獲取屬性值
3. 獲取文字內容
* String text():獲取文字內容
* String html():獲取標籤體的所有內容(包括字標籤的字串內容)
package 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.io.IOException;
/**
* Element物件
*/
public class JsoupDemo4 {
public static void main(String[] args) throws IOException {
String path = JsoupDemo4.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
Document document = Jsoup.parse( new File( path ), "UTF-8" );
//通過document獲取所有的name標籤,可以獲取兩個
Elements name = document.getElementsByTag( "name" );
System.out.println(name.size());
//通過element物件子標籤物件,可以獲取一個
Element ele_Student = document.getElementsByTag( "name" ).get( 0 );
Elements els_name = ele_Student.getElementsByTag( "name" );
System.out.println(els_name.size());
//獲取student物件的屬性值
String number = ele_Student.attr( "number" );
System.out.println(number.length());
//獲取文字內容
String text = els_name.text();
String html = els_name.html();
System.out.println(text);
System.out.println(html);
}
}
5. Node:節點物件
* 是Document和Element的父類