java jsoup xml_JavaWeb 之 XML 解析器 — Jsoup

一、Jsoup 解析步骤

步骤:

1、导入 jar 包(官网下载地址:Jsoup官网)

2、解析 XML文件

① 得到解析文件的路径:类加载器加载文件的路径

② 构建一个 File 对象

③ 调用 Jsoup 的 parse 方法解析 XML 文件得到一个 Document 对象

④ 调用 Document 的相关方法得到相关的标签对象(Element),Element 就是一个存放了 Element 对象的 ArrayList 集合

⑤ 调用 Element 的相关方法获取数据

XML 文件:

1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

2

3

4

5 tom

6 18

7 male

8

9

10 jack

11 18

12 female

13

14

解析 XML:

1 packagecom.ks.jsoup;2

3 importorg.jsoup.Jsoup;4 importorg.jsoup.nodes.Document;5 importorg.jsoup.nodes.Element;6 importorg.jsoup.select.Elements;7

8 importjava.io.File;9 importjava.io.IOException;10

11 /**

12 * xml_解析_Jsoup_快速入门13 *

14 * 步骤:15 * 1,导入JAR16 * 2,解析XML文件17 * A,得到解析文件的路径:类加载器加载文件的路径18 * B,构建一个FILE对象19 * C,调用JSOUP的PARSE方法解析XML文件得到一个DOCUMENT对象20 * D,调用Document的相关方法得到相关的标签对象(Element)21 * Elements:就是一个存了Element对象的ArrayList集合22 * E ,调用Element的相关方法得到想要的数据23 */

24 public classJsoupDemo1 {25 public static void main(String[] args) throwsIOException {26 //1.获取xml解析文件的路径

27 String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml").getPath();28 //2.解析xml文档,加载文档进内存,获取 dom 树 --》获取document对象

29 Document document = Jsoup.parse(new File( path ),"UTF-8");30 //3.获取元素对象Element,返回值是存了Element对象的ArrayList集合

31 Elements name = document.getElementsByTag( "name");32     System.out.println(name.size());

33 //4.获取第一个name的Element对象

34 Element element = name.get( 0);35 //5.获取数据

36 String text =element.text();37 System.out.println(text);38 }39 }

二、Jsoup 对象的使用

1、Jsoup 类

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的文档对象

Demo:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagejsoup;2 /**

3 * Jsoup对象功能4 */

5

6 importorg.jsoup.Jsoup;7 importorg.jsoup.nodes.Document;8

9 importjava.io.File;10 importjava.io.IOException;11 importjava.net.URL;12

13 public classJsoupDemo2 {14 public static void main(String[] args) throwsIOException {15 //获取xml解析文件的路径

16 String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml").getPath();17

18 //1.解析xml文档,加载文档进内存,获取document对象

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

21 //2.parse(String html):解析xml或HTML字符串

22 String str="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +

23 "\n" +

24 "\n" +

25 "\t\n" +

26 "\t\ttom\n" +

27 "\t\t18\n" +

28 "\t\tmale\n" +

29 "\t\n" +

30 "\t\n" +

31 "\t\tjack\n" +

32 "\t\t18\n" +

33 "\t\tfemale\n" +

34 "\t\n" +

35 "";36 Document document1 =Jsoup.parse( str );37 //System.out.println(document1);38

39 //3.parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML或xml文档对象

40 URL url=new URL("https:www.baidu.com");41 Document document2 = Jsoup.parse( url,10000);42 //System.out.println(document2);

43

44

45 }46 }

View Code

2、Document 对象

Document对象:文档对象,代表内存中的 dom 树

获取 Element 对象的方法:

getElementById​(String id):根据id属性值获取唯一的element对象

getElementsByTag​(String tagName):根据标签名称获取元素对象集合

getElementsByAttribute​(String key):根据属性名称获取元素对象集合

getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合

Demo:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ks.jsoup;2

3 importorg.jsoup.Jsoup;4 importorg.jsoup.nodes.Document;5 importorg.jsoup.select.Elements;6

7 importjava.io.File;8 importjava.io.IOException;9

10 /**

11 *Document/Elements对象12 */

13 public classJsoupDomo3 {14 public static void main(String[] args) throwsIOException {15 String path = JsoupDomo3.class.getClassLoader().getResource( "xml/student.xml").getPath();16 Document document = Jsoup.parse( new File( path ), "UTF-8");17

18 //1.获取所有的student对象

19 Elements student = document.getElementsByTag( "student");20 System.out.println(student);21 System.out.println("========================");22

23 //2.获取id属性的元素对象

24 Elements id = document.getElementsByAttribute( "id");25 System.out.println(id);26 System.out.println("========================");27

28 //3.根据id属性值获取唯一的element对象

29 Elements value = document.getElementsByAttributeValue( "id", "itcast");30 System.out.println(value);31 }32 }

View Code

3、Elements

Elements:元素 Element 对象的集合,可以当做 ArrayList 来使用

4、Element 对象

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():获取标签体的所有内容(包括子标签和标签里面的内容的字符串内容)

Demo:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ks.jsoup;2

3 importorg.jsoup.Jsoup;4 importorg.jsoup.nodes.Document;5 importorg.jsoup.nodes.Element;6 importorg.jsoup.select.Elements;7

8 importjava.io.File;9 importjava.io.IOException;10

11 /**

12 * Element对象13 */

14 public classJsoupDemo4 {15 public static void main(String[] args) throwsIOException {16 String path = JsoupDemo4.class.getClassLoader().getResource( "xml/student.xml").getPath();17 Document document = Jsoup.parse( new File( path ), "UTF-8");18

19 //通过document获取所有的name标签,可以获取两个

20 Elements name = document.getElementsByTag( "name");21 System.out.println(name.size());22

23 //通过element对象子标签对象,可以获取一个

24 Element ele_Student = document.getElementsByTag( "name" ).get( 0);25 Elements els_name = ele_Student.getElementsByTag( "name");26 System.out.println(els_name.size());27

28 //获取student对象的属性值

29 String number = ele_Student.attr( "number");30 System.out.println(number.length());31 //获取文本内容

32 String text =els_name.text();33 String html =els_name.html();34 System.out.println(text);35 System.out.println(html);36 }37 }

View Code

5、Node 对象

Node 表示节点对象,是 Document 和 Element 的父类

三、Jsoup 快捷查询方式

1、selector 选择器

使用的方法:Elements

Elements select​(String cssQuery)

详细语法,参考 JavaAPI中 Selector 类中定义的语法。

Demo:

1 importorg.jsoup.Jsoup;2 importorg.jsoup.nodes.Document;3 importorg.jsoup.nodes.Element;4 importorg.jsoup.select.Elements;5

6 importjava.io.File;7 importjava.io.IOException;8

9 /**10 *选择器查询

11*/

12 public classJsoupDemo {13 public static void main(String[] args) throwsIOException {14 //1.获取student.xml的path

15 String path = JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath();16 //2.获取Document对象

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

19 //3.查询name标签

20

21 Elements elements = document.select("name");22System.out.println(elements);23 System.out.println("=----------------");24 //4.查询id值为java的元素

25 Elements elements1 = document.select("#java");26System.out.println(elements1);27 System.out.println("----------------");28 //5.获取student标签并且number属性值为java_0001的age子标签

29 //5.1.获取student标签并且number属性值为java_0001

30 Elements elements2 = document.select("student[number=\"java_0001\"]");31System.out.println(elements2);32 System.out.println("----------------");33

34 //5.2获取student标签并且number属性值为java_0001的age子标签

35 Elements elements3 = document.select("student[number=\"java_0001\"] > age");36System.out.println(elements3);37

38}39

40 }

2、XPath

XPath 即为 xml 路径语言,它是一种用来确定 xml(标准通用标记语言的子级)文档中某部分位置的语言

使用步骤:

(1)使用 Jsoup 的 Xpath 需要额外导入 jar 包。

(2)使用 Xpath 语法完成查询。XPath 语法

Demo:

1 importcn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;2 importcn.wanghaomiao.xpath.model.JXDocument;3 importcn.wanghaomiao.xpath.model.JXNode;4 importorg.jsoup.Jsoup;5 importorg.jsoup.nodes.Document;6 importorg.jsoup.select.Elements;7 importjava.io.File;8 importjava.io.IOException;9 importjava.util.List;10

11 /**12 *XPath查询

13*/

14 public classJsoupDemo6 {15 public static void main(String[] args) throwsIOException, XpathSyntaxErrorException {16 //1.获取student.xml的path

17 String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();18 //2.获取Document对象

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

21 //3.根据document对象,创建JXDocument对象

22 JXDocument jxDocument = newJXDocument(document);23

24 //4.结合xpath语法查询

25 //4.1查询所有student标签

26 List jxNodes = jxDocument.selN("//student");27 for(JXNode jxNode : jxNodes) {28System.out.println(jxNode);29}30

31 System.out.println("--------------------");32

33 //4.2查询所有student标签下的name标签

34 List jxNodes2 = jxDocument.selN("//student/name");35 for(JXNode jxNode : jxNodes2) {36System.out.println(jxNode);37}38

39 System.out.println("--------------------");40

41 //4.3查询student标签下带有id属性的name标签

42 List jxNodes3 = jxDocument.selN("//student/name[@id]");43 for(JXNode jxNode : jxNodes3) {44System.out.println(jxNode);45}46 System.out.println("--------------------");47 //4.4查询student标签下带有id属性的name标签 并且id属性值为java

48

49 List jxNodes4 = jxDocument.selN("//student/name[@id='java']");50 for(JXNode jxNode : jxNodes4) {51System.out.println(jxNode);52}53}54

55 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值