一文搞懂XML的基本使用

文章目录

    • 前言
    • 一 什么是xml
    • 二 xml的历史
    • 三 为什么要使用xml
    • 四 xml与HTML的区别
    • 五 xml的语法
    • 六 xml的约束与使用
    • 七 xml的解析

前言

  • 在学习java web中经常会配置xml文件,而在后面的框架学习中也会遇到xml,所以先来对xml简单学习一下,后面遇到关于xml新的应用再来补充,本文长期更新。
  • 参考文章:java3y的从零开始学习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

  • 正如前面所说,用在项目的配置文件中。
  • 贴一个回答

一文搞懂XML的基本使用_第1张图片

  • 但也有其他方面的作用。例如程序间数据的传输,充当小型数据库。
  • 程序间数据的传输: 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>xiaomingstu>

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

<stu>
    xiaoming
stu>
  • 元素必须闭合
  • 大小写敏感
  • 不能以数字开头
  • 不能交叉嵌套

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

3. 属性

  • 属性是xml元素的一部分。(id就是属性值)
<student id="100">
    <name>Tomname>
student>
  • 这里要注意:

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

  • 五个预定义的xml实体字符
    一文搞懂XML的基本使用_第2张图片

4. 注释

  • 和HTML一样的注释

5. 处理指令

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

6. CDATA

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

六 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的基本使用_第3张图片
一文搞懂XML的基本使用_第4张图片

  • 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的操作方法来取出和操作数据。
  4. PULL:Android操作系统内置的解析器,sax方式的。
  • xml文档的解析过程:要使用xml文档的应用程序不是直接对xml文档进行操作的,它要通过xml解析器执行SAX/DOM 解析方式来获取到xml的内容。

一文搞懂XML的基本使用_第5张图片

  • 具体解析内容看这篇文章
    https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247484936&idx=2&sn=6f811188eb489d6a3737032e043aadd4&chksm=ebd74709dca0ce1f98e2ef78680a323d3848e08cf65f1ad9550b6f860a19b732c8803c880761&scene=21#wechat_redirect

你可能感兴趣的:(javaweb)