1. 程式人生 > 實用技巧 >jsoup解析xml常用selector

jsoup解析xml常用selector

selector可以讓我們篩選自己想要的資料從而提升開發效率

其中 document.select方法會返回一個elements集合我們可以通過在select方法裡面填寫不同的引數來篩選,抽取我們想要的資料然後再處理結果

具體實現步驟:

  1、匯入jar包

  2、解析文件

    2.1獲取路徑

      Stringpath =className.class.getClassLoader.getResourse("documentName.xml").getPath;

    2.2得到文件

      其中一種解析方法:

      Document document=Jsoup.parse(new File(path),"utf-8");

      其他:

        Jsoup.parse(String html):解析xml或html的文件物件

        Jsoup.parse(URL url,int timeoutMillis):通過網路路徑指定的html或xml的文件物件

  3、使用select方法提供的一系列選擇器來對文件進行對應的操作

  原始碼:

    

    xml文件原始碼:

        

<?xml version='1.0' encoding='utf-8'?>
<students>
    <student id="1" class="man">
        <name>李富貴</name>
        <age>18</age>
        <addr>湖南</addr>
    </student>
    <student id="2">
        <name color="pingk">黃呀冬</name>
        <age>17</age>
        <addr>湘潭</addr>
    </student>
    <student id="3">
        <name color="blue">馬冬梅</name>
        <age>33</age>
        <addr>四川</addr>
    </student>
    <student id="4" class="man">
        <name>袁華</name>
        <age>22</age>
        <addr>南京</addr>
    </student>
    <student id="5"></student>
    <student id="6"></student>
</students>

DocumentUtil類原始碼:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Evaluator;

import java.io.File;
import java.io.IOException;

public class DocumentUtil {
    public static Document getDocument(String path){
        try {
           return Jsoup.parse(new File(path),"utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

常用selector操作原始碼:

 //獲取student.xml文件路徑
        String  path =Main.class.getClassLoader().getResource("student.xml").getPath();

            //獲取student.xml文件
             Document document= DocumentUtil.getDocument(path);

            //獲取id為2的同學
             Elements stu2 =document.select("#2");
             System.out.println("id為2的同學:\n"+stu2+"\n============================");

             //獲取id為1的同學的姓名(E F    an F element descended from an E element) 獲取e 下面所有的 f
            Elements stu1Name=document.select("#1 name");
            String stu1NameStr=stu1Name.text();
            System.out.println("id為1的同學的姓名:"+stu1NameStr+"\n============================");

            //根據class獲取同學
            Elements mans=document.select(".man");
            System.out.println("class為man的同學:\n"+mans+"\n============================");

      //輸出第一個學生
          System.out.println(document.select("student:first-child"));

      //獲取第二個學生(xx:eq(n)    elements whose sibling index is equal to n) 獲取第n+1個xx元素
          System.out.println("第二個學生:\n"+document.select("student:eq(1)"));

      //輸出student.xml中含有冬的名字
         System.out.println(document.select("name:contains(冬)").text());

       //輸出屬性有 color的元素 [attr]    elements with an attribute named "attr" (with any value) 屬性名為“attr”的元素(任意值)
          System.out.println("屬性有color的元素:\n"+document.select("[color]")+"\n==============================");

          //輸出屬性以c開頭的元素
          System.out.println("屬性以co開頭的元素:\n"+document.select("[^co]")+"\n==============================");

          //屬性為“color”,值為“blue”的元素
          System.out.println("屬性為“color”,值為“blue”的元素:\n"+document.select("[color=blue]")+"\n==============================");

          //color屬性的值以p開頭的元素
          System.out.println("屬性的值以p開頭的元素:\n"+document.select("[color^=p]")+"\n==============================");

       
      //輸出students所有的name元素
       System.out.println("students下所有的name元素:+\n"+document.select("students name")+"\n=================");

      //輸出students直接子類name(包含兒子 不包含孫子)
      System.out.println("students直接子類name:\n"+document.select("students>name")+"\n=================");

      //輸出所有的name,age元素
      System.out.println("所有的name,age元素:\n"+document.select("name,age"));


       

注意事項:

  xml文件千萬不要放在中文目錄下

  如果使用ideaUTF-8 編碼設定,需要設定兩個地方,1, setting 2,otherSetting如果只在setting裡面設定編碼新建專案則容易出現中文亂碼問題因為在setting中只針對於當前 專案