XML基础(一)(只管能看懂XML文件)

XML基础(一)

1、概述

1.1 定义(xml是个啥玩意儿?)

XML(eX t ensible M arkup L anguage)俗称差妹儿或者叫额克死妹儿,专业称之为: 可拓展标记语言
(1)何为标记,指的是一种标记语言,或者标签语言,即用一系列的标签来对数据进行描述
(2)何为拓展,简单来说就是用户可以自己定义标签。

1.2 作用(能用来干啥?)

(1)作为数据传输的标准。好读,好维护,好扩展,还TM与语言无关,任谁都会选择他来担任这个数据传输的角色吧。。。
(2)作为配置文件。其实很多软件和框架,都会提供XML文件配置的方式,以便可以方便快捷的修改软件或框架的功能
(3)持久化数据。啥意思?简单来说就是可以将数据存到xml文件中,把xml当做一个临时的小型数据库。当然,重要的数据还是要存到正经的数据库中的,别问为什么,问就是xml存数据会不安全(doge)。
(4)简化平台变更。在系统更换平台的时候,普通的数据会存在不兼容的问题,但是XML 数据以文本格式存储,使得 XML 在不损失数据的情况下,更容易扩展和升级。简直不要太好用。

1.3 历史(简单讲讲XML的故事?)

最开始的标记语言是GML(通用标记语言),1969年出生的,就是用来做计算机之间的通信,通信就会传输数据。后面GML发现自己不是很好,就开始自省,完善自身,于是在1985年重获新生,改名为SGML(标准通用标记语言),也是用来通信,传输数据。随着万维网的不断发展,1993年,在SGML基础上有出现了HTML语言( HTML 超文本的标记语言(HyperText Markup Language)),这个名字应该很是耳熟吧,前端必学呀,主要是用于万维网上的页面展示。但HEML仍有不少缺陷,于是这篇博客的主角诞生了,1998年,W3C组织推出了XML(可扩展标记语言),本来是想用XML代替HTML的,但没想到事与愿违,他们之间还是有一定差别,即便现在,XML也没能完成主子给它的任务,因为HTML在整个万维网的使用太广泛了(人家早出身几年,经历的也多,人缘广泛,想强行替代别人还是有点脱离现实了)

XML和HTML对比
1、XML主要用来描述数据
2、HTML主要用来显示数据

2、XML语法

2.1 文档声明

XML声明文件的可选部分,如果存在,则需要放在文档的第一行。如下

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

这里描述了xml的版本以及文档所用的编码格式

2.2 元素

定义

元素指的就是XML中的标记,这种标记也被称为标签、节点(节点这种称呼常见于框架中)

书写规范

一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范

  1. 不能以数字或部分标点符号开头
  2. 不能包含空格和特定的几个符号
  3. 标签必须成对出现不允许缺省结束标签
  4. 根元素有且只有一个,它是所有其他元素的父元素
  5. 大小写敏感
  6. 允许多层嵌套但是不允许交叉嵌套
<root>
	<child>
		<subchild>...</subchild>
	</child>
</root>
	

这里的标签就是根元素,如上

<root>
	<a>www.baidu.com</a>
</root>

元素是可以包含标签体的,如上

<root>
	<a></a>
<root>

元素也可以不包含标签体,如上

<root>
	<a>
	www.baidu.com
	</a>
</root>
<root>
	<a>www.baidu.com</a>
</root>

对于XML标签中出现的空格和换行,在XML解析程序都会当作标签内容进行处理,如上面两个代码,标签中内容还是有区别的,如上

XML标签大小敏感:须使用相同的大小写来编写开始标签和关闭标签,如下

<root>
	<message>这是正确的</message>
</root>
<root>
	<Message>这是错误的<message>
</root>

XML标签允许嵌套但是不允许 交叉,如下

<root>
	<message>
		<a>这是正确的</a>
	</message>
</root>
<root>
	<message>
		<a>这是错误的</message>
	</a>
</root>

2.3 属性

定义

属性(Attribute)提供了元素相关的一些额外信息。

使用规范

XML 属性写在开始标签中,并且属性值必须加引号,例如,可以是双引用,也可以是单引号,如下

<root>
	<person sex="female"></person>
</root>
<root>
	<person sex='female'></person>
</root>

一个元素可以有多个属性,它的基本格式为:<元素名 属性名=“属性值” 属性名=“属性值”>

<root>
	<person sex="female" age='18' email="xxqq.com"></person>
</root>

元素和属性使用实例

使用date属性来描述时间

<note date="10/01/2021">
	<to>tom</to>
	<from>mary</from>
	<msg>love</msg>
</note>

使用date元素来描述时间

<note>
	<date>10/01/2021</date>
	<to>tom</to>
	<from>mary</from>
	<msg>love</msg>
</note>

使用date元素和其扩展元素来描述数据

<note>
	<date>
		<day>10</day>
		<month>02</month>
		<year>2021</year>
	</date>
	<to>tom</to>
	<from>mary</from>
	<msg>love</msg>
</note>

如果有多个相同标签的时候,可以使用 id进行区别

<message>
	<note id="1">
		<date>
			<day>10</day>
			<month>02</day>
			<year>2021</year>
		</date>
		<to>tom</to>
		<from>mary</from>
		<msg>love</msg>
	</note>
	<note id="2">
		<date>
			<day>10</day>
			<month>02</day>
			<year>2021</year>
		</date>
		<to>tom</to>
		<from>mary</from>
		<msg>together</msg>
	</note>
</message>

2.4 实体

定义

一些字符拥有特殊的意义,在XML文档中,是不能直接使用的。
如果把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

<?xml version="1.0" encoding="utf-8"?>
<message>if salary < 1000 then</message>

此时浏览器会报错:invalid element name
这时候,可以使用XML中预定义的实体,来代替这个特殊符号,如下

<?xml version="1.0" encoding="utf-8"?>
<message>if salary &lt; 1000 then</message>

预定义实体与自定义实体

预定义实体
XML中预定义实体有在这里插入图片描述
可以看到定义实体的格式:&实体名

** 自定义实体 **
格式:

<!DOCTYPE 根元素名称[
	<!ENTITY 实体名 实体内容>
]>

例如:


<!DOCTYPE root[
	<!ENTITY school "清华大学">
]>

<root>
	<name>&school;</name>
</roo>

浏览器显示结果如下
在这里插入图片描述

2.5 注释

格式:

<!-- 注释内容 -->

使用注释时注意一下几点
(1)注释内容中不要出现–

<!-- -- -->

<!-- 上面的注释会报错 -->

浏览器解析结果
在这里插入图片描述

(2)不要把注释放在标签中间

<root> 
	<name <!-- 注释 --> >java </name>
</root>

浏览器解析结果
在这里插入图片描述

(3)注释不能嵌套

<root>
	<!-- 外层注释 <! -- 内部注释 --> -->
	<name>XML</name>
</root>

浏览器解析结果
在这里插入图片描述

3、CDATA

XML 解析器,会解析 XML 文档中所有的文本。当某个 XML 元素被解析时,其标签之间的文本也会被解析。

<root> 
	<tag> 
		<name>&amp;</name> 
		<entity>&amp;</entity>
	</tag>
</root>

浏览器解析结果
在这里插入图片描述

在xml中

  • 解析器进行解析的内容,称为PCDATA(Parsed CDATA)
  • 解析器不会解析的内容,称为CDATA,(Character Data)

在一些情况下,我们在xml中编写的特殊内容,例如特殊字符、代码等,并不希望解析器去解析,而是希望把这些内容按字符串原样输出即可,不需要做额外任何解析处理。这时候,我们就可以把这些内容,写在指定的CDATA区域内即可。

CDATA区域的格式

<![CDATA[需要原样输出的字符串]]>

例如:

<root>
	<tag>
		<name>&amp;</name>
		<entity><![CDATA[&amp;]]></entity>
	</tag>
</root>

XML 文档中的所有文本均会被解析器解析。只有 CDATA 区段中的文本会被解析器

4、XML和CSS

CSS简介

XML文件中的内容,可以配合CSS进行内容的样式渲染,例如控制字体大小、颜色等
CSS(Cascading Style Sheets) 层叠样式表,通常用来给HTML中内容、或者XML中内容进行样式的渲染

例如:先创建一个css后缀的文件,在该文件中编写下面的代码

name{
    
    
	font-size:30px;
	font-weight:bold;
	color:red;
}
name{
    
    
	font-size:30px;
	font-weight:bold;
	color:green;
}

处理指令

处理指令,简称PI (processing instruction),可以用来指定解析器如何解析XML文档内容
例如:在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,使用test.css文件来渲染xml内容。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="test.css" type="text/css"?> 
<class>
	<student id="001">
		<name>张三</name>
		<age>20</age>
	</student>
	<student id="002">
		<name>李四</name>
		<age>20</age>
	</student>
</class>

渲染后的效果如下:
在这里插入图片描述
还有其他渲染功能可以到菜鸟教程那去学,内容很多,就不写了

5、命名空间

因为XML文档中的标签,是用户可以自定义的,所以可能在俩个不同的XML文档中,出现相同名字的标签元素或属性,如果我们不从语法上提供区别,则XML处理器将无法区分它们。如下,
在这里插入图片描述
在这里插入图片描述
为避免冲突,解决措施如下:

(1)使用不同的前缀区分
在这里插入图片描述
在这里插入图片描述
这里的x、y就是区分这两个table标签的前缀。

(2)使用前缀并且声明前缀属于哪个命名空间

命名空间声明的语法:xmlns:前缀=“URI”。

统一资源标识符(URI,全称 Uniform Resource Identifier)
统一资源标识符(URI)是一串可以标识因特网资源的字符。
最常用的 URI 是用来标识因特网域名地址的统一资源定位器(URL)。另一个不那么常用的 URI 是统一资源命名(URN)。
在这里插入图片描述
在这里插入图片描述

可以看到,我在根标签中定义了一个xmlns:x属性,xml代表xml nameSpace,x是声明的命名空间,可以理解为http://www.baidu.com/XML.x的一个别名。在标签中使用x相当于使用这个uri地址,一旦使用了x这个前缀,就代表这个标签是属于http://www.baidu.com/XML/x这个命名空间下的元素。

补充,当然也可以在一个文档中定义多个命名空间,如下

<b:book xmlns:b="http://www.baidu.com/xml/b" 
        xmlns:a="http://www.baidu.com/xml/a">

(3)直接定义默认命名空间
默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。

默认命名空间格式:xmlns=“URI”

如下:
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lalala_dxf/article/details/121034427