Jsoup解析器

1.快速入门

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class demo1 {
public static void main(String[] args) {
//获取Document对象,根据xml文档获取
//1.获取student.xml的path
String path = demo1.class.getClassLoader().getResource("student.xml").getPath();
//2.解析xml文档,加载文档进内存,获取dom树
try {
Document document = Jsoup.parse(new File(path),"utf-8");
//3.获取元素对象 name,返回值类型Elements继承了ArrayList,是一个集合
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
Elements elementstu = document.getElementsByTag("student");
System.out.println(elementstu.size());
//获取第一个name的element对象
Element element = elements.get(0);
//获取数据
String name = element.text();
System.out.println(name);
} catch (IOException e) {
e.printStackTrace();
}
}
}

2.对象

  1. Jsoup:工具类,可以解析html和xml文档,返回Document

    • parse(File in,String charsetName):解析xml或html文件
    • parse(String str):解析xml或html字符串
    • parse(URL url,int timeoutMillis):通过网络路径获取指定的xml或html文档
  2. Document:文档对象,代表文档中的dom树

    • getElementById(String id):根据id属性值获取唯一元素对象

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

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

    • getElementsByAttribute(String key,String value):根据属性名和属性值获取元素对象集合

  3. Elements:元素Element对象的集合

    • 获取子元素对象
  4. Element:元素对象

    • 获取属性值
      • String attr(String key)
    • 获取文本内容
      • String text():获取文本内容
      • html():获取标签体的所有内容,包括子标签
  5. Node:节点对象

    • 是Document和Element的父类

3.查询方式

  • selector:选择器

    • Elements select(String cssQuery)
    • Jsoup文档中参考selector类中定义的语法
    1
    Elements select = document.select("student[number='stu1'] > age");
  • XPath:

    • XML路径语言,确定XML文档中某部分位置的语言
    • 导入jar包
    • 根据document对象,创建JXDocument对象
    • 查询w3cshool参考手册,使用xpath的羽凡完成查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class demo3 {
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
String path = demo3.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "gbk");
//根据document对象,创建JXDocument
JXDocument jxDocument = new JXDocument(document);
//结合XPath语法查询
//查询所有的student标签
List<JXNode> jxNodes = jxDocument.selN("//student");

//查询student下所有的name标签
List<JXNode> nodes = jxDocument.selN("//student/name");

//查询student下有id属性的name标签
List<JXNode> jxNodes1 = jxDocument.selN("//student/name[@id]");

//查询student下有id属性的name标签id属性值为name1
List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id='name1']");

}
}