java基础--XML

目录

1XML概述

1.1XML是什么

1.2XML的应用方向

2XML语法

2.1XML语法总述

2.2XML语法-文档声明

2.3XML语法-元素(标签)

2.4XML语法-属性

2.5XML语法-注释

2.6XML语法-转义字符

2.7XML语法-CDATA区

2.8XML约束的概念及作用

3XML解析

3.1XML解析方式介绍

3.2解析工具介绍

3.3XML解析原理及DOM模型

3.4DOM4J的使用步骤及常用方法

3.5DOM4J结合XPATH解析XML


1XML概述

1.1XML是什么

        可扩展的标记(标签)语言,是一门独立的语言,有自己的语法规则。

        标记语言:基于一些标签的。例如:<name>玖玖</name>

        XML的本质是一个纯文本文件,它的内部是标签+数据。

        XML不是自定义标签,而是自定义标签。

1.2XML的应用方向

        记录数据

        当做配置文件

        数据传输

2XML语法

2.1XML语法总述

        XML有自己的语法结构。

        主要的语法组成:

  • 文档声明
  • 标签
  • 属性
  • 注释
  • 转义字符
  • CDATA区

2.2XML语法-文档声明

        一个标准的XML,通常会在0行0列的位置定义一个“文档声明”。

<?xml version = “1.0(或者1.1)" encoding = “UTF-8" ?>

version:版本号

encoding:编码集

        文档声明是给XML的编辑器和解析器看的,告诉它们在本页使用哪个版本的语法以及编码。

        文档声明不是必须的,但如果要写文档声明必须在0行0列的位置上。

2.3XML语法-元素(标签)

        标记即为标签tag(元素element)

  • 标签:也叫标记、元素,是定义XML的重要组成部分,我们在数据上都是要带标签的。
  • 标签的格式:
    • 完整标签:<name>玖玖</name> 成对标签将数据放在中间。
    • 单标签(自闭和标签):<person 属性="属性值" age="18"/> 没有标签体。
  • 标签的名称只能包含:字母、中文、数字、四个符号(_ - : .),并且数字和符号不能作为开头,标签名称中间也不许有空格。
  • 标签是区分大小写的。
  • 标签可以嵌套。

2.4XML语法-属性

  • 属性:任何标签都可以定义属性。
    • 完整标签只可以将属性定义在开始标签。
    • 自闭和标签不能将属性定义在"/"之后。
  • 属性格式:属性名="值"
    • 值 必须用一对双引号或者单引号括起来。
    • 一个标签可以定义多个属性,每个属性之间用空格隔开。
    • 一个标签中定义的多个属性不能重名。

2.5XML语法-注释

  • XML只有一种注释:<!--注释内容-->
  • 注释不能写在一个标签名里。
  • 注释不能嵌套

2.6XML语法-转义字符

        转义字符:可以替换一些特殊符号

        例如有个标签,要存储以下内容:

<code>a < b</code>

        XML中的转义字符,也叫实体字符,例如

字符预定义的转义字符说明
<&lt;小于
>&gt;大于
"&quot;双引号
'&apos;单引号
&&amp;和号

2.7XML语法-CDATA区

        CDATA区:只要是在CDATA区中的内容,全部认为是文本,没有特殊符号。

        格式:

<![CDATA[ 文本 ]]>

        作用:如果数据中包含大量的转义字符,对于编写、维护、可读性都产生了副作用,我们可以将数据封装在CDATA区。

2.8XML约束的概念及作用

         自定义的XML没有规范,可以任意书写,阅读不方便,并且后期需要根据标签名进行解析,如果任意书写将无法解析。所以我们需要一定的约束。

        XML约束:XML应该具有一定的规范,所以以约束来限制XML的书写。

        XML约束分为两种

                dtd(旧版本约束):比较简单,一些小型的、简单的文档使用。

                schema(新版本约束):比较复杂,一些大型的、复杂的文档使用。

        XML约束可以约束哪些内容呢:

                文档中可以出现哪些标签。

                标签之间的包含关系。

                标签出现的顺序。

                标签出现的频率。

                等

3XML解析

3.1XML解析方式介绍

  • dom解析:
    • 一次性将文档中所有内容读取到内存,并在内存中生成dom树模型。这个模型中记录了所有标签以及他们的层次结构。
    • 优点:可以对元素进行增、删操作。
    • 缺点:慢、占用内存。
    • 只适合小文件。
  • sax解析:
    • 一次读取一行,解析一行。
    • 优点:快、占用内存小。
    • 缺点:只能读取文件,没有文档结构,不能进行增删操作。
  • pull解析:
    • Android的解析方式 SDK

        解析器:就是根据不同的解析方式提供的具体实现。有些解析器的操作过于繁琐,为了方便开发人员,提供有益于操作的解析开发包。

3.2解析工具介绍

  • JAXP解析:JDK自带的解析工具,比较原始、底层,用起来不是很方便。
  • DOM4J解析:应用最广的解析工具,内部结合了dom和sax解析方式。
  • JDOM解析:dom4j的兄弟,没有dom4j强大。
  • JSOUP解析:对HTML进行解析。

3.3XML解析原理及DOM模型

        所有的元素 文本 属性 统统称之为叫节点 node

        element 元素

        text 文本

        attribute 属性

        node 节点(所有的内容都是节点)

        叶子节点: 最后一层的节点

        DOM4J工具将XML文档一次性读取到内存中,并生成“DOM树”:

        程序中最终获取的是“Document”对象。我们程序可以通过这个Document对象逐层的获取各级节点。

3.4DOM4J的使用步骤及常用方法

        使用dom4j解析需要引入dom4j的jar包。

        

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="0001">
        <name>JavaWeb开发教程</name>
        <author>张孝祥</author>
        <sale>100.00元</sale>
    </book>
    <book id="0002">
        <name>三国演义</name>
        <author>罗贯中</author>
        <sale>100.00元</sale>
    </book>
</books>
        //创建读取对象
        SAXReader saxReader = new SAXReader();
        //读取xml文件 获得document对象
        Document document = saxReader.read(TestDemo.class.getClassLoader().getResourceAsStream("book.xml"));
        //获取根元素
        Element rootElement = document.getRootElement();
        //获取根节点下一级所有元素
        List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            //获取元素的属性值
            String id = element.attributeValue("id");
            //获取文本数据
            String name = element.elementText("name");
            String author = element.elementText("author");
            String sale = element.elementText("sale");
        }

3.5DOM4J结合XPATH解析XML

        在dom4j的基础上 封装了一个 xpath技术 , xpath 快速获得我们所需要的内容(xpath是以节点node为核心的内容展开的)

  1. 我们之前使用dom4j解析xml的方式比较直接:获取Document对象,然后再获取根元素,然后再获取它的各级子、孙元素。这种逐级的获取方式,如果文档很大,解析起来会很费事。
  2. 使用Xpath的方式解析就比较方便。它的核心思想使用:“路径”的方式来获取一个节点。
  3. 使用Xpath的方式需要引入jaxen包。
        //创建解析工具
        SAXReader saxReader = new SAXReader();
        //读取xml文件
        Document document = saxReader.read(TestDemo.class.getClassLoader().getResourceAsStream("book.xml"));
        //获得节点对象
        Node node = document.selectSingleNode("/books/book/name");
        //获得文本
        String text = node.getText();

        Xpath语法说明:

/   从根路径下开始 书写即可  /books/book/name
 //  从任意路径下开始(从xml自上而下的顺序)
 @   根据属性获得数据

        //创建解析工具
        SAXReader saxReader = new SAXReader();
        //读取xml文件
        Document document = saxReader.read(TestDemo.class.getClassLoader().getResourceAsStream("book.xml"));
        /**
         *  "/books/book/name"
         *  参数: 能够匹配到 我们需要的标签内容即可
         *  绝对匹配  /根路径下开始/子级路径/子级路径
         *
         *   /   从根路径下开始 书写即可  /books/book/name
         *   //  从任意路径下开始(从xml自上而下的顺序)
         *   @   根据属性获得数据
         */
        //获得数据
        Node node1 = document.selectSingleNode("/books/book/name");
        Node node2 = document.selectSingleNode("//name");
        //Node节点 每一个节点也是一个元素
        System.out.println(node.getText());
        //可以强转成Element对象调用其API
        Element element = (Element)node;
        System.out.println(element.getText());
        Node node = document.selectSingleNode("//author[@name='xxx']");
        System.out.println(node.getText());

 

        以上就是部分xml的知识点啦,后续会继续补充。各位大佬如发现有知识点错误或者有不同的建议与意见,欢迎评论、私信指正,本人才疏学浅还需向各位大佬学习,还请不吝赐教!在此感谢各位的观看!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值