XML解析——Jsoup解析器

Jsoup概念

*jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。

Jsoup基本使用

1.导入jar包
    链接:https://pan.baidu.com/s/14-Y6Satl334uw_0aEd-9qA
    提取码:0uvi
2.获取Document对象
3.获取对应标签的Element对象
4.获取数据

public static void getFirstName() throws Exception{
    /*
    * 1. 获取Document对象
    * 2. 获取student.xml的path
    * 3. 解析xml文档 parse(url, charsetName)
    * 4. 获取元素对象Element
    * 5. 根据下标获取第一个name
    * 6. 使用text()方法获取元素的内容
    * */
    //2.获取Document对象,根据xml文档获取
    //2.1获取student.xml的path
    String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
    //2.2解析xml文档,加载文档进内存,获取dom树--->Document
    Document document = Jsoup.parse(new File(path), "utf-8");
    //3.获取元素对象 Element
    Elements elements = document.getElementsByTag("name");

    //3.1获取第一个name的Element对象
    Element element = elements.get(1);
    //3.2获取数据
    String name = element.text();
    System.out.println(name);
}

Jsoup中的对象

1.Jsoup: 工具类,可以解析html或xml文档,返回Document
2.获取Document对象 
    *parse(File in,String charsetName):解析xml或html文件的。
    *paser(String html):解析xml或html字符串
    *parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
3.获取对应的标签 Element 对象 
    *getElementById​(String id):根据id属性值获取唯一的element对象
    *getElementsByTag​(String tagName):根据标签名称获取元素对象集合
    *getElementsByAttribute​(String key):根据属性名称获取元素对象集合
    *getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合
4.获取属性值 
    *String attr(String key):根据属性名称获取属性值
5.获取文本内容 
    1.String text():获取文本内容
    2.String html():获取标签体的所有内容(包括字标签的字符串内容)
//Node: 节点对象. 是Document和Element的父类

快捷查询方式

1.selector 选择器
    1.Elements select(String cssQuery)
        语法:	https://blog.csdn.net/syt_boss/article/details/82863990
// 使用选择器selector来快速查询需要的元素
public static void getSelector() throws Exception{
    String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
    Document document = Jsoup.parse(new File(path), "utf-8");
    // 根据标签名选择器来获取name元素
    Elements names = document.select("name");
    System.out.println(names);
    System.out.println("--------------------");
    // 根据id选择器来获取
    Elements eles = document.select("#888");
    System.out.println(eles);
    System.out.println("--------------------");
    // 根据类选择器来获取
    Elements eles2 = document.select(".zy");
    System.out.println(eles2);
    System.out.println("--------------------");
    // 根据属性选择器来查询
    Elements eles3 = document.select("student[number="102"]");
    System.out.println(eles3);
    System.out.println("--------------------");
    // 根据后代选择器来查询
    Elements eles4 = document.select("student > age");
    System.out.println(eles4);
}

XPath

*注: 这里说的XPath为Jsoup中的XPath操作, 不同的解析器也可能支持XPath, XPath语法相同, 但是不同的解析器如何来操作XPath的语法可能不同!
1.导包(前面提供的网盘链接)
2.通过JXDocument对象调用selN("XPath语法")来操作. 
    1.通过JXDocument jxDocument = new JXDocument(document);来创建JXDocument对象.
// 使用Jsoup的XPath来操作DOM树
public static void getXPath() throws Exception {
    String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
    Document document = Jsoup.parse(new File(path), "utf-8");
    // 根据Document创建JXDocument对象
    JXDocument jxDocument = new JXDocument(document);
    // 结合XPath语法查询
    List<JXNode> jxNodes = jxDocument.selN("//name");
    for (JXNode jxNode : jxNodes) {
        System.out.println(jxNode);
    }
    System.out.println("-------------------------");
    // 查询所有student标签下的name标签
    List<JXNode> jxNodes1 = jxDocument.selN("//student/name");
    for (JXNode jxNode : jxNodes1) {
        System.out.println(jxNode);
    }
    System.out.println("-------------------------");
    // 查询student标签下带有class属性的sex标签
    List<JXNode> jxNodes2 = jxDocument.selN("//student/sex[@class]");
    for (JXNode jxNode : jxNodes2) {
        System.out.println(jxNode);
    }
    System.out.println("-------------------------");
    // 查询student标签下带有class属性的sex标签,并且class属性值为gzy
    List<JXNode> jxNodes3 = jxDocument.selN("//student/sex[@class='gzy']");
    for (JXNode jxNode : jxNodes3) {
        System.out.println(jxNode);
    }
}
原文地址:https://www.cnblogs.com/linjing111/p/12766136.html