XML解析——Jsoup解析XML文档

XML解析方式:

  1. DOM方式:将标记语言文档一次性加载到内存中,在内存中形成一DOM树的树形结构

    1. 优点:操作方式简单,可以对文档很轻易的进行CRUD操作,与JS操作DOM方式几乎一样
    2. 缺点:占用内存太大,特别消耗资源
  2. XML的常见解析器:

    1. JAxp
    2. DOM4J
    3. Jsoup。
    4. 当然还有其他这里不一一列举了
  3. 选用Jsou解析器做演示。

    使用步骤:

    1. 导包肯定就不用说了吧

    2. 加载XML或者HTML文档,生成Document对象。

      下面是Jsoup文档中的内容:

      static Documentparse(File in, String charsetName)将文件的内容解析为HTML。
      static Documentparse(File in, String charsetName, String baseUri)将文件的内容解析为HTML。
      static Documentparse(InputStream in, String charsetName, String baseUri)读取输入流,并将其解析为文档。
      static Documentparse(InputStream in, String charsetName, String baseUri, Parser parser)读取输入流,并将其解析为文档。
      static Documentparse(String html)将HTML解析为文档。
      static Documentparse(String html, String baseUri)将HTML解析为文档。
      static Documentparse(String html, String baseUri, Parser parser)使用提供的解析器将HTML解析为文档。
      static Documentparse(URL url, int timeoutMillis)获取一个URL,并将其解析为HTML。
    3. 获取Element对象,根据Document对象或者Element对象获取Element对象,常用方法如下。

      ElementgetElementById(String id)按ID查找元素,包括或在此元素下。
      ElementsgetElementsByAttribute(String key)查找具有命名属性集的元素。
      ElementsgetElementsByAttributeStarting(String keyPrefix)查找具有以提供的前缀开头的属性名称的元素。
      ElementsgetElementsByAttributeValue(String key, String value)查找具有特定值的属性的元素。
      ElementsgetElementsByClass(String className)查找具有此类的元素,包括或在此元素下。
      ElementsgetElementsByTag(String tagName)使用指定的标记名查找元素,包括和递归地在该元素下查找元素。

      注意:返回值为Elements其本质是一个对象集合,可以看做ArrayList

    4. 获取想要的数据

      Stringhtml()检索元素的内部HTML。
      Elementhtml(String html)设置此元素的内部HTML。
      Thtml(T appendable)将此节点及其子节点写入给定的Appendable.
      Stringid()弄到id元素的属性。
    5. Element的增删改,就不赘述了,可以去查找Jsoup文档。

  4. 代码演示:

    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;
    import java.net.URL;
    /**
     * 通过Jsoup解析XML文档
     */
    public class JsoupParse {
        public static void main(String[] args) {
            Document document = loadXml();
            //System.out.println(document);
    
            //得到所有的student标签
            Elements student = getStudent(document);
            for (Element element : student) {
                System.out.println(element);
                System.out.println("---------------");
            }
    
            //得到student标签中的第一个的text的值
            getTagText(student.get(0));
            System.out.println("---------------");
    
            //得到第一个student标签的下的name标签
            Elements name = student.get(0).getElementsByTag("name");
            System.out.println(name);
            System.out.println("---------------");
    
            //得到某个标签指定属性的值
            String id = name.attr("id");
            System.out.println(id);
            System.out.println("---------------");
    
            //设置某个元素指定属性的值
            name.attr("id","100000");
            System.out.println(name);
    
        }
    
        /**
         * 得到标签中的值
         * @param element
         */
        private static void getTagText(Element element) {
            String text = element.text();
            System.out.println(text);   //远 21 男
    
        }
    
        /**
         * 得到所有的student标签元素
         * @param document 传入Document对象
         * @return Elements 返回一个Elements对象
         */
        private static Elements getStudent(Document document) {
            Elements student = document.getElementsByTag("student");
            return student;
        }
    
    
        private static Document loadXml() {
            //加载XML文件
            ClassLoader classLoader = JsoupParse.class.getClassLoader();
            URL resource = classLoader.getResource("student.xml");
            String path = resource.getPath();
            //形成Document对象
            Document document = null;
            try {
                document = Jsoup.parse(new File(path),"utf-8");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return document;
        }
    }
    

    结果如下:

    <student> 
     <name id="1001">
      远
     </name> 
     <age>
      21
     </age> 
     <sex>
      男
     </sex> 
    </student>
    ---------------
    <student> 
     <name id="1002">
      悦
     </name> 
     <age>
      20
     </age> 
     <sex>
      女
     </sex> 
    </student>
    ---------------
    远 21 男
    ---------------
    <name id="1001">
     远
    </name>
    ---------------
    1001
    ---------------
    <name id="100000">
     远
    </name>
    
    Process finished with exit code 0
    
    
  5. 本次测试使用的XML内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--<?xml-stylesheet type="text/css" href="a.css" ?>-->
    <students>
        <student>
            <name id="1001"></name>
            <age>21</age>
            <sex></sex>
        </student>
        <student>
            <name id="1002"></name>
            <age>20</age>
            <sex></sex>
        </student>
    </students>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值