xml解析之Jsoup器

    技术2022-07-13  71

    Jsoup介绍

    Jsoup使用

    导包

    平时代码例子

     获取programmers标签所有数据,以及其文本

    获取id为p1的程序员的代码

    快捷查询

    selector选择器 

    查询所有年龄

    获取id为p2的人的名字

    xpath

    概念

    使用

    语法

    获取所有人的名字

    获取id为p1的程序员的代码


     

    Jsoup介绍

    百度百科:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

    Jsoup使用

    导包

    平时代码例子

    新建一个xml文件。我放在src目录下

    <?xml version="1.0" encoding="UTF-8" ?> <Programmers> <Programmer id="p1"> <name>马对钱无趣</name> <age>56</age> <code> <p>这是p标签</p> </code> </Programmer> <Programmer id="p2"> <name>刘不知妻美</name> <age>54</age> <code>null</code> </Programmer> </Programmers>

     

     获取programmers标签所有数据,以及其文本

    JsoupDemo1代码

    package com.jsoup; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import java.io.*; /** * @author 林高禄 * @create 2020-07-02-11:57 */ public class JsoupDemo1 { public static void main(String[] args) throws IOException { String path = JsoupDemo1.class.getClassLoader().getResource("jsoupTest.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); Elements elements = document.getElementsByTag("Programmers"); System.out.println(elements); System.out.println("---------------------"); // 遍历获取文本 elements.forEach(s-> System.out.println(s.text())); System.out.println("---------------------"); // 直接获取文本,内部自动遍历 System.out.println(elements.text()); } }

    运行输出

    <programmers>   <programmer id="p1">    <name>    马对钱无趣   </name>    <age>    56   </age>    <code> <p>这是p标签</p> </code>   </programmer>   <programmer id="p2">    <name>    刘不知妻美   </name>    <age>    54   </age>    <code>null</code>   </programmer>  </programmers> --------------------- 马对钱无趣 56 这是p标签 刘不知妻美 54 null --------------------- 马对钱无趣 56 这是p标签 刘不知妻美 54 null

    获取id为p1的程序员的代码

    package com.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; /** * @author 林高禄 * @create 2020-07-02-11:57 */ public class JsoupDemo2 { public static void main(String[] args) throws IOException { String path = JsoupDemo2.class.getClassLoader().getResource("jsoupTest.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); Element p2 =document.getElementById("p1"); Elements code = p2.getElementsByTag("code"); // 标签下的所有内容 System.out.println(code.get(0).html()); System.out.println("------------------------------"); // 标签下的文本 System.out.println(code.get(0).text()); } }

    运行输出:

    <p>这是p标签</p> ------------------------------ 这是p标签

    可见html和text是有区别的

    快捷查询

    selector选择器 

    使用方法:Elements select(String cssQuery),cssQuery类似CSS中标签、id、类选择器等语法:参考selector类中定义的语法

     

    查询所有年龄

    package com.jsoup; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import java.io.File; import java.io.IOException; /** * @author 林高禄 * @create 2020-07-02-11:57 */ public class JsoupDemo3 { public static void main(String[] args) throws IOException { String path = JsoupDemo3.class.getClassLoader().getResource("jsoupTest.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); // 查询age标签 Elements age = document.select("age"); System.out.println(age.text()); } }

    运行输出:

    56 54

    获取id为p2的人的名字

    package com.jsoup; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import java.io.File; import java.io.IOException; /** * @author 林高禄 * @create 2020-07-02-11:57 */ public class JsoupDemo4 { public static void main(String[] args) throws IOException { String path = JsoupDemo4.class.getClassLoader().getResource("jsoupTest.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); // 获取id为p2的人的名字,Programmer[id="p2"]标识id为p2的Programmer,> name为直接子name标签 Elements select = document.select("Programmer[id=\"p2\"] > name"); System.out.println(select.text()); } }

     运行输出:

    刘不知妻美

    xpath

    概念

    百度百科:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

    使用

    xpath是独立的,所以Jsoup要使用xpath,得导入相关的jar包

    语法

    xpath的语法,打开W3school,找到xpath

    获取所有人的名字

    package com.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 java.io.File; import java.io.IOException; import java.util.List; /** * @author 林高禄 * @create 2020-07-02-11:57 */ public class JsoupDemo5 { public static void main(String[] args) throws IOException, XpathSyntaxErrorException { String path = JsoupDemo5.class.getClassLoader().getResource("jsoupTest.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); // 获取xpath的相关对象 JXDocument jxDocument = new JXDocument(document); // 获取所有人名字 List<JXNode> jxNodes = jxDocument.selN("//name"); System.out.println(jxNodes); System.out.println("----------------------------"); jxNodes.forEach(s-> System.out.println(s.getElement().text())); } }

    运行输出:

    [<name>  马对钱无趣 </name>, <name>  刘不知妻美 </name>] ---------------------------- 马对钱无趣 刘不知妻美

    获取id为p1的程序员的代码

    package com.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 java.io.File; import java.io.IOException; import java.util.List; /** * @author 林高禄 * @create 2020-07-02-11:57 */ public class JsoupDemo6 { public static void main(String[] args) throws IOException, XpathSyntaxErrorException { String path = JsoupDemo6.class.getClassLoader().getResource("jsoupTest.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); // 获取xpath的相关对象 JXDocument jxDocument = new JXDocument(document); // 获取id为p1的程序员的代码 // 虽然在xml中是Programmer,但是这里要写programmer,要小写,不然查不到 List<JXNode> jxNodes1 = jxDocument.selN("//Programmer"); System.out.println(jxNodes1); System.out.println("-------------------------------"); List<JXNode> jxNodes2 = jxDocument.selN("//programmer[@id='p1']/code"); System.out.println(jxNodes2.get(0).getElement().text()); } }

     运行输出:

    [] ------------------------------- 这是p标签

    Processed: 0.011, SQL: 9