JAVA基础编程105——XML解析

一、解析环境

1、工具:jsoup

2、jar包:jsoup-1.11.2.jar ,JsoupXpath-0.3.2.jar

二、文件目录:

1、解析方式:dom解析

2、文件目录

在这里插入图片描述

三、案例代码

1、xml文件

<?xml version="1.0" encoding="utf-8" ?>
<lol>
    <hero id="中单"  number="1001">
        <name>疾风剑豪</name>
        <age>3</age>
        <sex></sex>
    </hero>
    <hero id="上单" number="1002">
        <name>洛克萨斯之手</name>
        <age>6</age>
        <sex></sex>
    </hero>
    <hero id="下单" >
        <name>影流之主</name>
        <age>12</age>
        <sex>未知</sex>
    </hero>
</lol>

2、解析代码

package com.mollen.jsoup;

import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
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.net.URL;
import java.util.List;

/**
 * @ClassName:  Test
 * @Auther:     Mollen
 * @CreateTime: 2018-09-18  22:11:52
 * @Description:
 *              xml解析
 */
public class Test {
    public static void main(String[] args) throws Exception {
       /*
          【1.获取xml文件Document信息】
        */
        //方式1:本地读取xml文件
        Document doc1 = Jsoup.parse(new File("javaweb_day011//src//xml//lol.xml"), "utf-8");
        //方式2:直接读取xml信息
        Document doc2 = Jsoup.parse(" <?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
                "    <lol>\n" +
                "        <hero id=\"中单\"  number=\"1001\">\n" +
                "            <name>疾风剑豪</name>\n" +
                "            <age>3</age>\n" +
                "            <sex>男</sex>\n" +
                "        </hero>\n" +
                "        <hero id=\"上单\" number=\"1002\">\n" +
                "            <name>洛克萨斯之手</name>\n" +
                "            <age>6</age>\n" +
                "            <sex>女</sex>\n" +
                "        </hero>\n" +
                "        <hero id=\"下单\" >\n" +
                "            <name>影流之主</name>\n" +
                "            <age>12</age>\n" +
                "            <sex>未知</sex>\n" +
                "        </hero>\n" +
                "    </lol>");
        //方式3:网络读取xml文件
        Document doc3 = Jsoup.parse(new URL("https://www.baidu.com/"), 100000);

        /*
          【2.获取xml文件Element信息】
         */
        //方式1:通过标签id获取
        Element element1 = doc1.getElementById("上单");
        //方式2:通过标签名称获取
        Elements elements1 = doc1.getElementsByTag("hero");
        //方式3:通过标签属性获取
        Elements elements2 = doc1.getElementsByAttribute("number");
        //方式4:通过标签属性和属性值获取
        Elements elements3 = doc1.getElementsByAttributeValue("number", "1001");

        /*
          【3.获取子Element信息】
         */
        //方式1:通过标签id获取
        Element ele1 = element1.getElementById("上单");
        //方式2:通过标签名称获取
        Elements eles1 = element1.getElementsByTag("name");
        //方式3:通过标签属性获取
        Elements eles2 = element1.getElementsByAttribute("number");
        //方式4:通过标签属性和属性值获取
        Elements eles3 = element1.getElementsByAttributeValue("number", "1002");

        /*
           【4.根据属性名称获取属性值】
         */
        String value = element1.attr("number");

        /*
           【5.获取元素的文本信息】
         */
        String text = element1.text();
        String html = element1.html();

       /*
           【6.select语句查询Element信息】
        */
        //方式1:通过标签名称获取
        Elements e1 = doc1.select("name");
        //方式2:通过标签id获取
        Elements e2 = doc1.select("#中单");
        //方式3:通过标签属性获取
        Elements e3 = doc1.select("hero[number=\"1002\"]");
        //方式4:属性标签下的子Element信息获取
        Elements e4 = doc1.select("hero[number=\"1002\"]>age");

        /*
            【7.xpath解析xml文件--根据不同需求解析】
         */
        //1.获取student.xml的path(也可以和上面一样,这里用类加载器的方式获取)
        String path = "javaweb_day011//src//xml//lol.xml";
        //2.获取Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");

        //3.根据document对象,创建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);

        //4.结合xpath语法查询
        //4.1查询所有lol标签
        List<JXNode> jxNodes = jxDocument.selN("//lol");
        for (JXNode jxNode : jxNodes) {
            System.out.println(jxNode);
        }

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

        //4.2查询所有lol标签下的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//lol/hero");
        for (JXNode jxNode : jxNodes2) {
            System.out.println(jxNode);
        }

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

        //4.3查询lol标签下带有id属性的name标签
        List<JXNode> jxNodes3 = jxDocument.selN("//lol/hero[@id]");
        for (JXNode jxNode : jxNodes3) {
            System.out.println(jxNode);
        }

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

        //4.4查询lol标签下带有id属性的name标签 并且id属性值为itcast
        List<JXNode> jxNodes4 = jxDocument.selN("//lol/hero[@id='中单']");
        for (JXNode jxNode : jxNodes4) {
            System.out.println(jxNode);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/mollen/article/details/82764957