• 【精选】XML技术知识点合计


    XML概述

    在这里插入图片描述

    概念

    XML(Extensible Markup Language):可扩展标记语言

    可扩展:标签都是自定义的。

    发展历程

    HTML和XML都是W3C(万维网联盟)制定的标准,最开始HTML的语法过于松散,于是W3C制定了更严格的XML语法标准,希望能取代HTML。但是程序员和浏览器厂商并不喜欢使用XML,于是现在的XML更多的用于配置文件传输数据等功能。

    是谁造成的HTML语法松散?

    浏览器厂商。最开始W3C制定HTML的时候语法还是比较严格的。但浏览器厂商为了抢占市场,语法错误也可以解析成功HTML,最后“内卷”到HTML即使语法非常混乱也是可以被浏览器解析。

    image-20220528165807275

    tips:归根到底是语法的制定者使用者不一致造成了HTML语法混乱,JAVA语法严格就是因为java语言的运行工具java虚拟机也是sun公司(现在是oracle)出品的,语法不通过不让运行。

    为什么程序员不使用XML写前端页面?

    因为程序员松散惯了,不想写很严格的代码。同样挣一万块钱,谁会从每月上一天班的公司跳槽到996的公司呢?

    XML的功能

    1. 配置文件:在今后的开发过程当中我们会频繁使用框架(框架:半成品软件),使用框架时,需要写配置文件配置相关的参数,让框架满足我们的开发需求。而我们写的配置文件中就有一种文件类型是XML。

      日后编写大型项目,不可能从头到尾都是原创代码,很多功能前人已经写好,我们只需要使用前人写好的半成品软件(框架),再加入一些符合我们需求的配置即可完成开发。

    2. 传输数据:在网络中传输数据时并不能传输java对象,所以我们需要将JAVA对象转成字符串传输,其中一种方式就是将对象转为XML类型的字符串。

      比如携程等旅游网站可以买火车票,但他们其实也是替12306卖票,此时他们就需要拿到12306的票务数据。JAVA对象不能在网络上传输,可以转为XML类型的字符串。

    XML和HTML的区别

    1. XML语法严格,HTML语法松散
    2. XML标签自定义,HTML标签预定义

    XML基本语法

    • 文件后缀名是.xml
    • 第一行必须是文档声明
    • 有且仅有一个根标签
    • 标签必须正确关闭
    • 标签名区分大小写
    • 属性值必须用引号(单双都可)引起来

    XML组成部分

    在这里插入图片描述

    文档声明

    文档声明必须放在第一行,格式为:

    
    
    • 1

    属性列表:

    • version:版本号(必须)
    • encoding:编码方式

    标签

    XML中标签名是自定义的,标签名有以下要求:

    • 包含数字、字母、其他字符
    • 不能以数字和标点符号开头,可以以_开头
    • 不能包含空格

    指令(了解)

    指令是结合css使用的,但现在XML一般不结合CSS,语法为:

    
    
    • 1

    属性

    属性值必须用引号(单双都可)引起来

    文本

    如果想原样展示文本,需要设置CDATA区,格式为:

    
    
    • 1

    约束

    DTD约束

    ​ 虽然XML标签是自定义的。但是作为配置文件时,也需要遵循一定的规则。就比如在主板上硬盘口只能插硬盘,不能插入其他硬件。约束就是定义XML书写规则的文件,约束我们按照框架的要求编写配置文件。

    我们作为框架的使用者,不需要会写约束文件,只要能够在xml中引入约束文档,简单的读懂约束文档即可。XML有两种约束文件类型:DTD和Schema。

    DTD是一种较简单的约束技术,引入方式如下:

    • 本地引入:

      
      
      • 1
    • 网络引入:

      
      
      • 1

    student.dtd

    	<!ELEMENT students (student*) >
    <!ELEMENT student (name,age,sex)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT sex (#PCDATA)>
    <!ATTLIST student number ID #REQUIRED>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    student.xml

    
    DOCTYPE students SYSTEM "student.dtd">
    <students>
        <student number="bz001">
            <name>javaBoyname>
            <age>10age>
            <sex>sex>
        student>
    students>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Schema约束

    Schema比DTD对XML的约束更加详细,引入方式如下:

    1. 写xml文档的根标签

    2. 引入xsi前缀:确定Schema文件的版本。

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
      • 1
    3. 引入Schema文件

      xsi:schemaLocation="Schema文件定义的命名空间 Schema文件的具体路径"
      
      • 1
    4. 为Schema约束的标签声明前缀

      xmlns:前缀="Schema文件定义的命名空间"
      
      • 1

    Jsoup解析器

    在这里插入图片描述

    XML解析思想

    XML解析即读写XML文档中的数据。框架的开发者通过XML解析读取框架使用者配置的参数信息,开发者也可以通过XML解析读取网络传来的数据。XML有如下解析思想:

    DOM解析思想

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

    • 优点:操作方便,可以对文档进行CRUD的所有操作
    • 缺点:占内存
    SAX解析思想

    逐行读取,基于事件驱动的。

    • 优点:不占内存,一般用于手机APP开发中读取XML
    • 缺点:只能读取,不能增删改

    XML常见解析器

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

    Jsoup快速入门

    xml1

    步骤:

    1. 导入jar包
    2. 加载XML文档进内存,获取DOM树对象Document
    3. 获取对应的标签Element对象
    4. 获取数据
    public class Demo1 {
      // 获取XML中所有学生的姓名
      public static void main(String[] args) throws IOException {
        // 2.加载XML文档进内存。获取DOM树对象Document
        // 2.1 获取类加载器
        ClassLoader classLoader = Demo1.class.getClassLoader();
        // 2.2使用类加载器,找到XML文档的路径
        String path = classLoader.getResource("com/java/xsd/student.xml").getPath();
        // 2.3加载XML文档进内存,并转成Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 3.获取对应的标签Element对象
        Elements name = document.getElementsByTag("name");
        // 4.获取数据
        for (Element element : name) {
          String text = element.text();
          System.out.println(text);
         }
       }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    Jsoup对象

    在这里插入图片描述

    Jsoup:可以解析xml或html,形成dom树对象。

    常用方法:

    • static Document parse(File in, String charsetName):解析本地文件
    • static Document parse(String html):解析html或xml字符串
    • static Document parse(URL url, int timeoutMillis):解析网页源文件
    public class Demo2 {
      // Jsoup
      public static void main(String[] args) throws IOException {
        // 解析本地XML
        String path = Demo2.class.getClassLoader().getResource("com/java/xsd/student.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        System.out.println(document);
        System.out.println("------------------");
        // 解析网络资源
        Document document2 = Jsoup.parse(new URL("https://www.baidu.com"), 2000);
        System.out.println(document2);
       }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Document对象

    在这里插入图片描述

    Document:xml的dom树对象

    常用方法:

    • Element getElementById(String id):根据id获取元素
    • Elements getElementsByTag(String tagName):根据标签名获取元素
    • Elements getElementsByAttribute(String key):根据属性获取元素
    • Elements getElementsByAttributeValue(String key,String value):根据属性名=属性值获取元素。
    • Elements select(Sting cssQuery):根据选择器选取元素。

    Element对象

    在这里插入图片描述

    Element: 元素对象

    常用方法:

    • String text():获取元素包含的纯文本。
    • String html():获取元素包含的带标签的文本。
    • String attr(String attributeKey):获取元素的属性值。

    XPath解析

    在这里插入图片描述

    XPath即为XML路径语言,它是一种用来确定标记语言文档中某部分位置的语言。

    使用方法:

    1. 导入Xpath的jar包
    2. 获取Document对象
    3. Document对象转为JXDocument对象
    4. JXDocument调用selN(String xpath),获取List对象。
    5. 遍历List,调用JXNodegetElement(),转为Element对象。
    6. 处理Element对象。
  • 相关阅读:
    进程间通信(管道/消息队列/共享内存/信号量)
    HTTP复习(二)
    springboot+小区公共停车位管理 毕业设计-附源码201517
    Aitium Designer20
    JAVAEE---计算机是如何组成的
    VSCODE中使用Django处理后端data和data models
    太厉害了,阿里内网最新发布的【MySQL面试小册】把MySQL架构+索引原理+性能优化都讲清楚了
    【Nacos】服务发现数据模型
    【微信小程序】文章设置
    【uni-app+vue3】分享功能,App端调用手机的系统分享,可分享到微信、QQ、朋友圈等,已实现
  • 原文地址:https://blog.csdn.net/guojiaqi_/article/details/134523697