一文搞懂xml的基本使用

Posted java学习之路0221

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞懂xml的基本使用相关的知识,希望对你有一定的参考价值。

前言

  • 在学习java web中经常会配置xml文件,而在后面的框架学习中也会遇到xml,所以先来对xml简单学习一下,后面遇到关于xml新的应用再来补充,本文长期更新。

  • 参考文章:

  • 参考视频:黑马程序员的xml学习https://www.bilibili.com/video/BV1P7411F7Wr

一 什么是xml

  • xml是可扩展标记语言(Extensible Markup Language)。可扩展指的是它的标签是自定义的 。

  • 它的功能主要是用来做配置文件

二 xml的历史

  • gml(1969)->sgml(1985)->html(1993)->xml(1998)

  • 1969 gml(通用标记语言),主要目的是要在不同的机器之间进行通信的数据规范

  • 1985 sgml(标准通用标记语言)

  • 1993 html(超文本标记语言,www网)

  • 1998 xml extensiable markup language 可扩展标记语言

  • xml最初是用来替代HTML的,因为HTML的代码规范性很弱(写代码时可以省略很多代码,而浏览器的引擎会自动补全。但不同浏览器之间没有统一规范,造成代码的混乱),由于市场等原因没有成功,后来便倾向于取代代码的配置文件properties  (properties是配置文件,主要的作用是通过修改配置文件可以方便的修改代码中的参数,实现不用改文件即可灵活变更参数)

  • xml具有比properties更好的效果,被广泛用在配置文件中。

三 为什么要使用xml

  • 正如前面所说,用在项目的配置文件中。

  • 贴一个回答

在这里插入图片描述
  • 但也有其他方面的作用。例如程序间数据的传输,充当小型数据库。

  • 程序间数据的传输:QQ之间的数据传送,用XML格式来传送数据,具有良好的可读性,可维护性

  • 充当小型数据库:我们程序中可能用到一些经常要人工配置的数据,如果放在数据库中读取不合适(因为这会增加维护数据库的工作),则可以考虑直接用XML来做小型数据库。这种方式直接读取文件显然要比读数据库快。比如msn中保存用户聊天记录就是用XML文件。

四 xml与HTML的区别

xml和和HTML很相似,都是标记语言,使用起来也有很多共同点,但也有很多差异。差异如下。

  • xml标签都是自定义的,HTML的标签都是预定义的。

  • xml语法严格,HTML语法松散(代码可以省略,残缺)。

  • xml是存储数据的,HTML是展示数据的。

  • HTML相比,xml什么也不做,它是用来结构化,存储和传递信息的(从上面的xml配置文件,小型数据库等可看出)

五 xml的语法

1.文档声明

  • 格式:

  • xml声明放在xml的第一行

  • 属性列表

  • version :版本号,必填的属性,一般为1.0。

  • encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值 ISO-8859-1,一般使用utf-8或者GBK

  • standalone:是否独立。取值为yes 或者 no  ,表示xml文档是否依赖其他文件,但现在的xml文件不用这个属性了。

  • 正确的文档属性

<?xml version="1.0" encoding="UTF-8"?>

2. 元素

  • 每个xml文档必须有且只有一个根元素。

根元素是一个包括文档中其他所有元素的元素
根元素的起始标记要放在所有其他元素的起始标记之前
根元素的结束标记要放在所有其他元素的结束标记之后

  • XML元素中的出现的空格和换行都会被当做元素内容进行处理

<stu>xiaoming</stu>

上面的代码和下面的代码表示的意义不相同

<stu>
    xiaoming
</stu>
  • 元素必须闭合

  • 大小写敏感

  • 不能以数字开头

  • 不能交叉嵌套

    这里的注意点有点多,但并不需要全部记忆,只要知道xml语法是规范的,不能随意乱写就行!

3. 属性

  • 属性是xml元素的一部分。(id就是属性值)

<student id="100">
    <name>Tom</name>
</student>
  • 这里要注意:

属性值用双引号(”)或单引号(’)分隔,如果属性值中有单引号,则用双引号分隔;如果有双引号,则用单引号分隔。那么如果属性值中既有单引号还有双引号怎么办?这种要使用实体(转义字符,类似于html中的空格符),XML有5个预定义的实体字符

  • 五个预定义的xml实体字符

    一文搞懂xml的基本使用
    在这里插入图片描述

4. 注释

  • 和HTML一样的注释

<!-- 注释内容-->

5. 处理指令

  • 可以用css文件修饰xml文档,然后用浏览器打开xml文件后会看到被修饰的效果,但一般不用。使用时要引入css文件。

<?xml-stylesheet type="text/css" href="a.css" ?>

6. CDATA

  • 在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出

  • 语法

<![CDATA[
    ...内容
]]>

六 xml的约束与使用

  • 由于xml是一种可以自定义的语言,所以在多人协调使用时会显得很混乱,所以我们要对它进行约束,人为的规定它的书写规则。

  • 约束方式分为两种。

  1. DTD:一种简单的约束技术(存在缺陷,无法对xml文档准确约束)

  2. Schema:一种复杂的约束技术(主要使用这个)

  • DTD:

     1.  引入DTD文档到xml文档中

        内部dtd:将约束文档定义在xml文档中。
<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
          外部dtd:将约束规则定义在外部的dtd文件中
<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
        2.   dtd约束的一些规则
一文搞懂xml的基本使用
在这里插入图片描述

在这里插入图片描述
  • Schema
         引入文档(开发中编辑器自动会引入)

            1. 填写xml文档的根元素(以下操作都是在根元素内部完成,添加属性)
            2. 引入xsi 前缀:        (有很多取值)
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                3.引入xsd 命名空间:(student.std 表示xml的Schema约束文档)
                 xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
               4.为每一个xsd约束声明一个前缀,作为标识:(下面的标识为无  在xmlns后等号前声明)
                xmlns="http://www.itcast.cn/xml"    

七 xml的解析

  • 因为xml被设计为“什么都不做”,XML只用于组织、存储数据,除此之外的数据生成、读取、传送等等的操作都与XML本身无关。所以需要专门的技术来解析使用它。

  • xml的解析方式有两种。

  1. DOM: 将标记语言一次加载进内存,在内存中形成一颗dom树
     --------- 优点:操作方便,可以对文档进行CRUD的所有操作
     ----------缺点:占内存

  2. SAX:逐行读取,基于事件驱动的。
    ----------优点:不占内存。
    ---------- 缺点:只能读取,不能增删改

  • 在xml解析中,除了解析方式外还要有解析器,通过解析器采用特定的解析方式来获取xml文档中的数据。

  • 常见的xml解析器有JAXP ,  DOM4j ,Jsoup,PULL。

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

  • xml文档的解析过程:要使用xml文档的应用程序不是直接对xml文档进行操作的,它要通过xml解析器执行SAX/DOM 解析方式来获取到xml的内容。

在这里插入图片描述
  • 具体解析内容看这篇文章


以上是关于一文搞懂xml的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

图文并茂!!!一文搞懂SpringAOP(面向切面编程)

内含面试|一文搞懂HBase的基本原理

内含面试|一文搞懂HBase的基本原理

总结系列-一文搞懂沉浸式状态栏

总结系列-一文搞懂沉浸式状态栏

一文搞懂反向传播算法