操作xml文件

  1. 解析(读取):将文档中的数据解读到内存中
  2. 写入:将内存中的数据保存到XML文档中。持久化的存储

解析xml的方式

  1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树

    • 优点:

      操作方便,可以对文档进行CRUD(增删改查)的所有操作

    • 缺点:

      占内存

  2. SAX:逐行读取,基于事件驱动

    • 优点

      不占内存

    • 缺点

      只能读取

  3. 常用的解析器:

    1. JAXP:sum公司提供的解析器,支持dom和sax两种思想
    2. DOM4J:优秀的解析器
    3. Jsoup:一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    4. PULL:android系统内置解析器

    Jsoup

    • 快速入门

      从URL,文件或字符串中刮取并解析HTML

      查找和提取数据,使用DOM遍历或CSS选择器

      操纵HTML元素,属性和文本

      根据安全的白名单清理用户提交的内容,以防止XSS攻击

      输出整洁的HTML

      参考

      • 步骤:

        1. 导入jar包
        2. 获取Document对象
        3. 获取对应的标签Element对象
        4. 获取数据

        代码:

        xml文件:

        <?xml version="1.0" encoding="UTF-8" ?>
        <students>
        <student number="heima_0001">
        <name id="cat">tom</name>
        <age>18</age>
        <sex>male</sex>
        </student>
        <student number="heima_0002">
        <name>jack</name>
        <age>12</age>
        <sex>male</sex>
        </student>
        </students>

        测试代码:

        public class JsoupTest {
        public static void main(String[] args) throws IOException {
        //获得路径path
        String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
        //解析
        Document document = Jsoup.parse(new File(path), "utf-8");
        //获取元素
        Elements elements = document.getElementsByTag("name");
        System.out.println(elements.size());
        //获取数据
        for (int i = 0; i < elements.size(); i++) {
        System.out.println(elements.get(i).text());
        }
        }
        }
      • 对象的使用

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

          1. parse方法

            1. 解析xml或html对象

              public static Document parse(File in,String charsetName)throws IOException

              Parse the contents of a file as HTML. The location of the file is used as the base URI to qualify relative URLs.

            2. 解析xml或html字符串

               public static Document parse(String html)

              Parse HTML into a Document. As no base URI is specified, absolute URL detection relies on the HTML including a <base href> tag.

            3. 通过网络路径获取指定的html或xml的文档对象

                public static Document parse(URL url,int timeoutMillis)throws IOException

              Fetch a URL, and parse it as HTML. Provided for compatibility; in most cases use [connect(String)](file:///C:/Users/ada/AppData/Local/Temp/360zip$Temp/360$3/day32_xml/03_参考/jsoup/jsoup-1.11.2-javadoc/org/jsoup/Jsoup.html#connect-java.lang.String-)

              The encoding character set is determined by the content-type header or http-equiv meta tag, or falls back to UTF-8.

              等;

        2. Document :文档对象。代表内存中的dom树

          1. 获取Element对象

            1. 根据标签名获取对象集合
            public Elements getElementsByTag(String tagName)

            Finds elements, including and recursively under this element, with the specified tag name.

            1. 根据属性名称获取对象集合
            public Elements getElementsByAttribute(String key)

            Find elements that have a named attribute set. Case insensitive.

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

            Find elements that have an attribute with the specific value. Case insensitive.

            1. 根据ID属性获取唯一的element
            public Element lastElementSibling()

            Gets the last element sibling of this element

        3. Elements :Element对象的集合。可以当作ArrayList来使用

        4. Element :元素对象

          1. 获取子元素对象
          2. 获取属性值
            1. String attr(String key):根据属性名称获取属性值
          3. 获取文本内容
            1. String text():获取文本内容
            2. String html();获取标签体的所有内容
        5. Node :节点对象

          • Document和Element的父类

        快速查询方式

        1. selector:选择器

          1. 使用的方法:Elements select(String cssQuery)

            1. 样例:

              public class JsoupTest {
              public static void main(String[] args) throws IOException {
              //获得路径path
              String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
              //解析
              Document document = Jsoup.parse(new File(path), "utf-8");
              //查询name标签
              Elements elements = document.select("name");
              System.out.println(elements.get(0).text());
              //查询id
              Elements id = document.select("#cat");
              System.out.println(elements.get(0).select("name").text());
              System.out.println("******************");
              //查找student中number等于heima_0001
              Elements select = document.select("student[number=\"heima_0001\"]");
              System.out.println(select);
              System.out.println("******************");
              //查找student中number等于heima_0001中的age子标签
              Elements select1 = document.select("student[number=\"heima_0001\"]>age");
              System.out.println(select1);
              }
              }
          2. XPath:

            解释:

            XPath 是一门在 XML 文档中查找信息的语言。

            XPath 是 XSLT 中的主要元素。

            XQuery 和 XPointer 均构建于 XPath 表达式之上

            • 使用Jsoup的xpath需要额外导入jar包

            • 查询w3cschool参考手册,使用xpath语法完成

              public class JsoupXpath {
              public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
              //获得路径path
              String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
              //解析
              Document document = Jsoup.parse(new File(path), "utf-8");
              //剧创建JXDocumnet对象
              JXDocument jxDocument=new JXDocument(document);
              //结合xpath语法查询
              List<JXNode> jxNodes = jxDocument.selN("//student");
              System.out.println(jxNodes); System.out.println("__________________________");
              List<JXNode> jxNode = jxDocument.selN("//student[@number='heima_0001']");
              System.out.println(jxNode);
              }
              }

XML解析之Jsoup的更多相关文章

  1. xml解析技术

    本文总结Dom,sax解析,  使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...

  2. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  3. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  4. 【Android】实现XML解析的几种技术

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  5. 定位和xml解析和gson解析加上拉加载,下拉刷新

    这里的上拉加载,下拉刷新用到是依赖包 Mainactivity,xml解析和定位 package com.exmple.autolayout; import java.util.List; impor ...

  6. tinyxml一个优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  7. PERL/LEX/YACC技术实现文本解析--XML解析

    继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版l ...

  8. 基本XML解析---编写

    #import "ViewController.h" #import "DDXML.h" @interface ViewController () @end @ ...

  9. iOS-数据解析XML解析的多种平台介绍

    在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...

随机推荐

  1. centos7编译安装LNMP(nginx-1.16.0,mysql8.0.16,php-7.3.6)常见问题报错及解决方法

    LNMP的安装与配置 nginx-1.16.0安装及配置: 第一步:前往官网下载nignx源码包 下载完毕后上传至服务器(先安装lrzsz) yum -y install lrzsz 安装完毕后执行: ...

  2. C# .Net Framework

    .NET Framework概述 .NET Framework是由微软开发,一个致力于敏捷软件开发.快速应用开发.平台无关性和网络透明化的软件开发平台. .NET Framework组成 .NET F ...

  3. 通过机器学习的线性回归算法预测股票走势(用Python实现)

    在本人的新书里,将通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得.这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn ...

  4. win10下git与gitlab安装与文件上传

    目前了解到的版本管理工具有三种:gitlab  GitHub 和 码云 个人感觉 gitlab 在公司用的较多 便于协同办公   GitHub各种资源有很多,适合个人使用   码云是中文版 便于入门 ...

  5. Ubuntu 查看已安装软件

    apt list --installed dpkg -l

  6. 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)

    前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...

  7. Web前端学习,需用了解的7大HTML知识点

    HTML是web前端开发基础,关于HTML,这里有几个很重要的知识点,在日常开发常常用到,并且在大家面试的时候也会问的,记住这7个重要知识点,助你在面试时优先录用. 1.网页结构 网页结构一般都包含文 ...

  8. [HNOI2013][BZOJ3143] 游走 - 高斯消元

    题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边 ...

  9. 套壳浏览器与Chrome浏览器之间的差别

    之前QQ浏览器一直是我前端调试工具的主力,因为它是一个套壳浏览器,所以它的兼容模式(谷歌Chrome内核)和极速模式(IE浏览器内核)简直是调试兼容性的神器,可以直接切换,不用再反复打开Chrome和 ...

  10. 阻塞IO模型

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> # ...