• XML介绍、基本语法和dom4j解析技术教学


    1. XML 简介

    什么是 xml

    xml 是可扩展的标记性语言。

    2. xml 的作用?

    xml 的主要作用有:

    1、用来保存数据,而且这些数据具有自我描述性

    2、它还可以做为项目或者模块的配置文件

    3、还可以做为网络传输数据的格式(现在 JSON 为主)。

    3、xml 语法

    \1. 文档声明。

    \2. 元素(标签)

    \3. xml 属性

    \4. xml 注释

    \5. 文本区域(CDATA 区)

    3.1、文档声明

    我们先创建一个简单 XML 文件,用来描述图书信息。

    **1)**创建一个 xml 文件

    文件名:books.xml

    xml声明。 而且这个属性

    version 是版本号

    encoding 是xml的文件编码

    standalone=“yes/no” 表示这个xml文件是否是独立的xml文件

    **2)**图书有 id 属性表示唯一标识,书名,有作者,价格的信息

    
    
    <books> 
    <book id="SN123123413241"> 
    <name>java编程思想name> 
    	<author>华仔author>	
    	<price>9.9price>	
    book>
    <book id="SN12341235123">
    <name>葵花宝典name> 
    <author>班长author> 
    <price>5.5price>
    book>
    books>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在浏览器中可以查看到文档

    img

    3.2xml 注释

    html 和 XML 注释一样 :

    3.3、元素(标签)

    咱们先回忆一下:

    html 标签:格式:<标签名>封装的数据

    单标签: <标签名 />
    换行


    水平线

    双标签 <标签名>封装的数据 标签名大小写不敏感标签有属性,有基本属性和事件属性

    标签要闭合(不闭合,html 中不报错。但我们要养成良好的书写习惯。闭合)

    **1)**什么是 xml 元素

    img

    元素是指从开始标签到结束标签的内容。

    例如:java 编程思想****

    元素 我们可以简单的理解为是 标签。

    Element 翻译元素

    **2)**XML 命名规则

    XML 元素必须遵循以下命名规则:

    2.1)名称可以含字母、数字以及其他的字符

    例如:

    <book id="SN213412341"> 
      <author>班导author> 
      <name>java编程思想name> 
      <price>9.9price> 
    book>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2)名称不能以数字或者标点符号开始

    img

    2.3)名称不能以字符 “xml”(或者 XML、Xml)开始(它是可以的)

    img

    2.4)名称不能包含空格

    img

    **3)**xml 中的元素(标签)也分成单标签和双标签:单标签

    格式: <标签名属性=”值” 属性=”值” …/> 双标签

    格式:< 标签名 属性=”值” 属性=”值” …>文本数据或子标签

    img

    3.4、xml 属性

    xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息

    在标签上可以书写属性:一个标签上可以书写多个属性。每个属性的值必须使用引号引起来。

    的规则和标签的书写规则一致。

    img

    1)属性必须使用引号引起来,不引会报错示例代码

    img

    3.5、语法规则:

    3.5.1)所有 XML 元素都须有关闭标签(也就是闭合)

    img

    3.5.2XML 标签对大小写敏感

    img

    3.5.3XML 必须正确地嵌套

    img

    3.5.4XML 文档必须有根元素

    根元素就是顶级元素,没有父标签的元素,叫顶级元素。

    根元素是没有父标签的顶级元素,而且是唯一一个才行。

    img

    3.5.5XML 的属性值须加引号

    img

    3.5.6XML 中的特殊字符

    img

    3.5.7)文本区域(CDATA 区)

    CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析

    CDATA 格式:

    img

    2、xml 解析技术介绍

    xml 可扩展的标记语言。

    不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来析。

    img

    document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)

    早期 JDK 为我们提供了两种 xml 解析技术 DOMSax 简介(已经过时,但我们需要知道这两种技术)

    dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。

    Java 对 dom 技术解析标记也做了实现。

    sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML )

    SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。

    它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。

    所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。

    第三方的解析: jdom 在 dom 基础上进行了封装、 dom4j 又对 jdom 进行了封装。

    pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件。

    这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。

    3、dom4j 解析技术(重点*****)

    由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包。

    3.1、Dom4j 类库的使用

    解压后:

    img

    3.2、dom4j 目录的介绍:

    **1)**docs 是文档目录

    img

    **2)**如何查 Dom4j 的文档

    img

    **3)**Dom4j 快速入门

    img

    **2)**lib 目录

    img

    3)src 目录是第三方类库的源码目录:

    img

    3.3、dom4j 编程步骤:

    第一步:先加载 xml 文件创建 Document 对象

    第二步:通过 Document 对象拿到根元素对象

    第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象

    第四步:找到你想要修改、删除的子元素,进行相应在的操作

    第五步,保存到硬盘上

    3.4、获取 document 对象

    创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。

    img

    需要解析的 books.xml 文件内容

     <books>
        <book sn="SN12341232">
            <name>辟邪剑谱name>
            <price>9.9price>
            <author>班主任author>
        book>
        <book sn="SN12341231">
            <name>葵花宝典name>
            <price>99.99price>
            <author>班长author>
        book>
    books>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    解析获取 Document 对象的代码

    /*
    * 读取xml文件中的内容
    */
    @Test public void readXML() throws DocumentException {
        // 需要分四步操作:
        //        第一步,通过创建SAXReader对象。来读取xml文件,获取Document对象
        //        第二步,通过Document对象。拿到XML的根元素对象
        //         第三步,通过根元素对象。获取所有的book 标签对象
    //        第四小,遍历每个book标签对象。然后获取到book标签对象内的每一个元素,再通过getText() 方法拿到
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document

    /*
    * dom4j 获取Documet对象
    */ @Test
    public void getDocument() throws DocumentException {
        // 要创建一个Document对象,需要我们先创建一个SAXReader对象
        SAXReader reader = new SAXReader();
        // 这个对象用于读取xml文件,然后返回一个Document。
        Document document = reader.read("src/books.xml");
        // 打印到控制台,看看是否创建成功
    System.out.println(document); }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.5、遍历标签获取所有标签中的内容(*******重点)

    需要分四步操作:

    第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象

    第二步,通过 Document 对象。拿到 XML 的根元素对象

    第三步,通过根元素对象。获取所有的 book 标签对象

    第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结束标签之间的文本内容

    @Test
        public void test2() throws Exception {
            //1. 通过创建SAXReader对象。来读取xml文件,获取Document对象
            SAXReader reader = new SAXReader();
            // 在Junit测试中,相对路径是从模块名开始算
            Document document = reader.read("src/books.xml");
    
            //2. 通过Document 对象获取根元素
            Element rootElement = document.getRootElement();
            System.out.println( rootElement);
    
            //3. 通过根元素获取book标签对象
            // element()和elements()都是通过标签名查找子元素
            List<Element> books = rootElement.elements("book");
            //4. 遍历,处理每个book标签转换为book类
            for (Element book : books) {
                //asXML() 把标签对象,转换为标签字符串
                //System.out.println( book.asXML());
                // 拿到book下面的name元素对象
                Element nameElement = book.element("name");
                // 拿到book下面的price元素对象
                Element priceElement = book.element("price");
                // 拿到book下面的author元素对象
                Element authorElement = book.element("author");
                // 再通过getText() 方法拿到起始标签和结束标签之间的文本内容
                System.out.println("书名" + nameElement.getText() + " , 价格:"
                        + priceElement.getText() + ", 作者:" + authorElement.getText());
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    打印内容:

    img

  • 相关阅读:
    ES6高级-Promise的用法
    【布隆过滤器】世界上大概有1 亿种小蛋糕,客户康宝要求这辈子不吃重复的小蛋糕。
    AI对话系统app开源
    dart flutter json 转 model 常用库对比 json_serializable json_model JsonToDart
    ueditor百度富文本编辑器粘贴后html丢失class和style样式
    HttpClient基本使用
    Service和启动其他应用的功能和替换Fragment
    中科大郑烇、杨坚老师《计算机网络-自顶向下方法》课程 第2章 应用层笔记
    Linux学习笔记——系统函数IO
    极致cms1:1精仿资源哟源码/资源网系统/下载教程娱乐网源码
  • 原文地址:https://blog.csdn.net/weixin_44589991/article/details/126127270