1. 程式人生 > >XML解析器(一)Jsoup

XML解析器(一)Jsoup

目錄

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的父類