• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 【XML】java解析XML(通過Jsoup實現)

    標簽: java  XML  xml  java解析XML  通過Jsoup實現  Jsoup

    【XML】java解析XML(通過Jsoup實現)

    1. 解析

    • 解析:操作xml文檔,將文檔中的數據讀取到內存中

    • 操作xml文檔
      1. 解析(讀取):將文檔中的數據讀取到內存中
      2. 寫入:將內存中的數據保存到xml文檔中。持久化的存儲

    • 解析xml的方式:
      1. DOM:將標記語言文檔一次性加載進內存,在內存中形成一顆dom樹
      * 優點:操作方便,可以對文檔進行CRUD的所有操作
      * 缺點:占內存
      2. SAX:逐行讀取,基于事件驅動的。
      * 優點:不占內存。
      * 缺點:只能讀取,不能增刪改

    • xml常見的解析器:

      1. JAXP:sun公司提供的解析器,支持dom和sax兩種思想
      2. DOM4J:一款非常優秀的解析器
      3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據。
      4. PULL:Android操作系統內置的解析器,sax方式的。

    2. Jsoup

    • Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據。

    • 步驟:
      1. 導入jar包
      2. 獲取Document對象
      3. 獲取對應的標簽Element對象
      4. 獲取數據

    • XML文件(student.xml)

    <?xml version="1.0" encoding="UTF-8" ?>
    
     <students>
     	<student number="siyi_0001">
     		<name id="1">
    			<xing></xing>
    			<ming></ming>
    		</name>
     		<age>18</age>
     		<sex>male</sex>
     	</student>
    	<student number="siyi_0002">
    		<name>jack</name>
    		<age>18</age>
    		<sex>male</sex>
    	</student>
    
     </students>
    
    • Demo1
    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;
    
    public class JsoupDemo1 {
        public static void main(String[] args) throws IOException {
            //2.獲取Document對象,根據XML文檔獲取
            //2.1獲取student.xml的path
            String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
            //2.2解析xml文檔,加載文檔進內存,獲取dom樹 --> Document
            Document document = Jsoup.parse(new File(path), "utf-8");
            //3.獲取元素對象  Element
            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);
        }
    }
    

    運行結果:

    • Demo2
    package jsoup;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import java.io.IOException;
    import java.net.URL;
    
    public class JsoupDemo2 {
        public static void main(String[] args) throws IOException {
            //2.1獲取student.xml的path
            String path = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
            //2.2解析xml文檔,加載文檔進內存,獲取dom樹 --> Document
            /*Document document = Jsoup.parse(new File(path), "utf-8");
            System.out.println(document);*/
    
            //2. parse(String html):解析XML或html字符串
            /*String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
                    "\n" +
                    " <students>\n" +
                    " \t<student number=\"siyi_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=\"siyi_0002\">\n" +
                    "\t\t<name>jack</name>\n" +
                    "\t\t<age>18</age>\n" +
                    "\t\t<sex>male</sex>\n" +
                    "\t</student>\n" +
                    "\n" +
                    " </students>";
            Document document = Jsoup.parse(str);
            System.out.println(document);*/
    
            //3.parse(URL url,int timeoutMillis):通過網絡路徑獲取指定的html或xml的文檔對象
            URL url = new URL("https://baike.baidu.com/item/jsoup/9012509?fr=aladdin");//代表網絡種的一個資源
            Document document = Jsoup.parse(url,5000);
            System.out.println(document);
        }
    }
    

    運行結果(百度百科標簽太多,就不全截屏了):

    • Demo3
    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;
    import java.net.URL;
    
    public class JsoupDemo3 {
        public static void main(String[] args) throws IOException {
            //1.獲取student.xml的path
            String path = JsoupDemo3.class.getClassLoader().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("-------------------");
    
            //3.2獲取屬性名為id的元素對象
            Elements elements1 = document.getElementsByAttribute("id");
            System.out.println(elements1);
            System.out.println("-------------------");
    
            //3.3獲取屬性值為heima_0001的元素對象
            Elements elementsByAttributeValue = document.getElementsByAttributeValue("number", "siyi_0001");
            System.out.println(elementsByAttributeValue);
    
            System.out.println("-------------------");
            Element elementById = document.getElementById("1");
            System.out.println(elementById);
        }
    }
    

    運行結果:

    • Demo4
    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;
    
    public class JsoupDemo4 {
        public static void main(String[] args) throws IOException {
            //1.獲取student.xml的path
            String path = JsoupDemo4.class.getClassLoader().getResource("student.xml").getPath();
            //2.獲取Document對象
            Document document = Jsoup.parse(new File(path), "utf-8");
            //通過document對象獲取name標簽,獲取所有的name標簽
            Elements elements = document.getElementsByTag("name");
            System.out.println(elements.size());
            System.out.println("------------");
    
            Element ele_student = document.getElementsByTag("student").get(0);
            Elements ele_name = ele_student.getElementsByTag("name");
            System.out.println(ele_name.size());
            System.out.println("------------");
    
            //獲取student對象的屬性值
            String number = ele_student.attr("number");
            System.out.println(number);
            System.out.println("------------");
            
            //獲取文本內容
            String text = ele_name.text();
            String html = ele_name.html();
            System.out.println(text);
            System.out.println(html);
        }
    }
    

    運行結果:

    • Demo5
    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;
    
    public class JsoupDemo5 {
        public static void main(String[] args) throws IOException {
            //1.獲取student.xml的path
            String path = JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath();
            //2.獲取Document對象
            Document document = Jsoup.parse(new File(path), "utf-8");
            //3.查詢name標簽
            Elements elements = document.select("name");
            System.out.println(elements);
            System.out.println("--------");
    
            //4.查詢id值為1的元素
            Elements elements1 = document.select("#1");
            System.out.println(elements1);
            System.out.println("--------");
    
            //5.獲取student標簽并且number屬性值為siyi_0001的age子標簽
            //5.1獲取student標簽并且number屬性值為siyi_0001
            Elements elements2 = document.select("student[number='siyi_0001']");
            System.out.println(elements2);
            System.out.println("--------");
    
            //5.2獲取student標簽并且number屬性值為siyi_0001的age子標簽
            Elements elements3 = document.select("student[number='siyi_0001']>age");
            System.out.println(elements3);
        }
    }
    

    運行結果:

    • Demo6
    package jsoup;
    
    import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
    import cn.wanghaomiao.xpath.model.JXDocument;
    import cn.wanghaomiao.xpath.model.JXNode;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    public class JsoupDemo6 {
        public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
            //1.獲取student.xml的path
            String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
            //2.獲取Document對象
            Document document = Jsoup.parse(new File(path), "utf-8");
            //3.根據document對象,創建JXDocument對象
            JXDocument jxDocument = new JXDocument(document);
            //結合Xpath語法查詢
            //4.1查詢所有的student標簽
            List<JXNode> jxNodes = jxDocument.selN("//student");
            for (JXNode jxNode : jxNodes){
                System.out.println(jxNode);
            }
            System.out.println("--------");
    
            //4.2查詢
            List<JXNode> jxNodes1 = jxDocument.selN("//student/name");
            for (JXNode jxNode:jxNodes1) {
                System.out.println(jxNode);
            }
            System.out.println("--------");
    
            //4.3查詢student標簽下帶有id屬性的name標簽
            List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");
            for (JXNode jxNode:jxNodes2) {
                System.out.println(jxNode);
            }
            System.out.println("--------");
    
            //4.4查詢student標簽下帶有id屬性的name標簽 并且id屬性值為1
            List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='1']");
            for (JXNode jxNode:jxNodes3) {
                System.out.println(jxNode);
            }
        }
    }
    

    運行結果:

    版權聲明:本文為qq_41879343原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_41879343/article/details/103549375

    智能推薦

    通過DOM方式解析xml

    簡述:XML 指可擴展標記語言(eXtensible Markup Language)。 XML 被設計用來傳輸和存儲數據。 XML 很重要,也很容易學習。 什么是xml? XML 指可擴展標記語言(EXtensible Markup Language)。 XML 是一種很像HTML的標記語言。 XML 的設計宗旨是傳輸數據,而不是顯示數據。 XML 標簽沒有被預定義。您需要自行定義標簽。 XML...

    java XML解析

    用到的jar包: dom4j-2.0.2 jaxen-1.1.6 1.解析weather.xml 源代碼: 解析結果: 2.解析ticket.xml: 源代碼: 解析結果:...

    Java 解析XML

    本文系摘抄再整理,來自http://www.w3school.com.cn/xml/xml_attributes.asp等 一、XML解析技術有兩種 DOM方式 根據XML的層級結構在內存中分配一個樹形結構,把XML的標簽,屬性和文本等元素都封裝成樹的節點對象 優點: 便于實現增 刪 改 查 缺點: XML文件過大可能造成內存溢出 SAX方式 采用事件驅動模型邊讀邊解析:從上到下一行行解析,解析到...

    java解析XML文件

    本文將簡單總結三種不同方式下的xml文件解析,代碼及實例截圖如下: 一、原生簡單的解析,不引入任何jar包 二、DOM解析,一次性把整個xml文檔加載進內存,然后在內存中構建一顆Document的對象樹,通過Document對象,得到樹上的節點對象,通過節點對象訪問(操作)到xml文檔的內容。這里導入dom4j的核心包dom4j-1.6.1.jar進行解析。 三、SAX解析,加載一點,讀取一點,處...

    Java核心--XML解析

    今天給大家分享關于XML解析的實際應用,XML簡單來說就是一種文件格式,這種格式的文件在Java程序開發中使用地非常廣泛,一般用來做配置文件。 比如需要在web.xml中配置web的相關設置,同時任何一個主流框架都需要通過配置XML文件的方式來完成業務邏輯到框架體系的對接。當然,如果使用SpringBoot這種快速開發框架,則可以大大減少對于XML文件的配置。總體來講,XML在開發中使用的頻率很高...

    猜你喜歡

    Java解析xml方法

    我在模擬tomcat的過程中需要解析xml,所以在此總結下常用的sax/dom,Dom4j,jsoup等。 其實sax/dom使用有點復雜,建議使用DOM4j等技術。 這里sax和dom還有Dom4j借鑒于:https://blog.csdn.net/m0_37499059/article/details/80505567 先看xml demo.xml SAX 運行結果 DOM 運行結果 Dom4...

    java中XML解析

    原生xml解析 DOM4J方式解析XML 導入依賴   解析xml文件    文件結構和原生相同  ...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡