史上最全解析xml(结合springMVCxml配置文件等实例讲解)

1.什么是xml?

xml(Extensible Markup language) 可扩展性标记语言,就是开发者在符合xml命名规则的基础上,可以根据自己的需求定义自己的标签;

xml用处主要有以下两个:
1.配置文件,我们在学习框架时,经常使用xml配置文件;
2.用来存储数据,在网络中传输

xml和html的区别:
- xml语法严格,html语法松散
- xml用来存储数据,html用来展示数据
- xml可以自定义标签,html是预定义标签

xml的基本语法:

1.xml的第一行必须定义为文档声明(<?xml version = ‘‘1.0’ ?’>)
2.xml文档中有且仅有一个根标签
3.属性值必须使用引号(单双都可)
4.标签必须正确关闭
5.xml标签区分大小写

2.xml约束

xml我们可以自己定义标签,如果不自己定义,就得满足一定的约束;

什么是约束:规定xml的书写规则,规定了你在xml中能够使用哪些标签和哪些属性;
一般约束文档是由开发人员提供好的,我们只需要在xml中引入约束文档即可;

格式良好的XML文档:遵循XML语法的。

有效的XML文档:遵守约束的XML文档。

注意:有效的XML文档必定是格式良好的,但良好的不一定是有效的

一下是两种常见的约束:

(1).DTD约束(简单,有缺陷)

在这里插入图片描述
举例:定义了students根标签,可以定义无数个student标签
在student标签中只能定义name,age,sex标签,且按照顺序

a、DTD(Document Type Definition):文档类型定义

作用:约束XML的书写规范
注意:dtd可以写在单独的文件中,扩展名是dtd,且必须使用UTF-8编码进行保存。

b、XML文档中如何导入DTD约束文档(XML外部)

l dtd文档在本地:

l dtd文档在网络上:

c、了解:也可以把DTD的内容直接写在XML文档内部。

写在XML文档内部,dtd没有编码要求。(了解)

DTD的主要缺陷是:不能对标签体中的数据类型进行限定,容易引发错误:

(2)Schema约束(现在开发中经常使用)

在这里插入图片描述

XML Schema 是 DTD 的继任者
我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。

理由如下:
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间

XML 文档可对 DTD 或 XML Schema 进行引用。

对 DTD 的引用(DTD约束文档后缀名是.dtd)
此文件包含对 DTD 的引用:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://www.w3school.com.cn/dtd/note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

对 XML Schema 的引用(Schema约束文档后缀名是.xsd)
此文件包含对 XML Schema 的引用:

<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

解释:
1.需要我们填写xml文件的根标签<note>
**2.引入xsi前缀(固定写法)

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

引入xsi前缀后,我们可以通过这个前缀来引入xsd文件;

xsi:schemaLocation="http://www.w3school.com.cn note.xsd

schemaLocation:表示文档路径note.xsd
其中http://www.w3school.com.cn叫作名称空间,它是给文档路径note.xsd起了个名字
有了这个名称空间以后,我们以后要使用note.xsd中的标签我们必须在标签前面加上名称空间,但是为了简便,我们给名称空间加了一个前缀:

xmlns="http://www.w3school.com.cn"

这里默认是空白前缀,如果我们给名称空间起了一个a前缀,那么标签就得这样写了

<?xml version="1.0"?>
<a:note
xmlns:a="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<a:to>George</a:to>
<a:from>John</a:from>
<a:heading>Reminder</a:heading>
<a:body>Don't forget the meeting!</a:body>
</a:note>

起前缀的作用是:
如果一个xml文件被多个xsd文档约束,然而这些文档中规定了有相同的标签,这时起前缀,我们再写标签时才知道是哪一个约束文档中的;

在这里插入图片描述

再拿springMVC的配置xml配置文件来举例:
在这里插入图片描述

这里引入了3个xsd文件,然后为他们分别起了不同的名称空间
beans:使用的空白前缀,因此在写bean标签时不用写前缀;

而context和mvc文档起了相应的context,mvc前缀,因此如果想使用文档中的标签时,得加上相应的前缀

。**

3.常见xml解析方式
  • DOM解析
  • SAX解析

在这里插入图片描述

区别:
DOM.DOM4j是一次性将xml文件加载到内存,再解析;
而SAX解析属于事件驱动型,是边读边解析,因此SAX解析适用于解析大的XML文件;

原理分析:
在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。

SAX解析允许在读取文档的时候,一行一行读取,读取一行释放一行,而不必等到整个文档装载完才会文档进行操作。

SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器: 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理

xml常见解析器:
在这里插入图片描述

现在用的最多的是DOM4j;使用DOM4j需要导入Dom4j.jar包

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值