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元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范
- 不能以数字或部分标点符号开头
- 不能包含空格和特定的几个符号
- 标签必须成对出现不允许缺省结束标签
- 根元素有且只有一个,它是所有其他元素的父元素
- 大小写敏感
- 允许多层嵌套但是不允许交叉嵌套
<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 < 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>&</name> <entity>&</entity></tag>
</root>
浏览器解析结果
在xml中
- 解析器进行解析的内容,称为PCDATA(Parsed CDATA)
- 解析器不会解析的内容,称为CDATA,(Character Data)
在一些情况下,我们在xml中编写的特殊内容,例如特殊字符、代码等,并不希望解析器去解析,而是希望把这些内容按字符串原样输出即可,不需要做额外任何解析处理。这时候,我们就可以把这些内容,写在指定的CDATA区域内即可。
CDATA区域的格式
<![CDATA[需要原样输出的字符串]]>
例如:
<root><tag><name>&</name><entity><![CDATA[&]]></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”
如下:
XML基础(一)(只管能看懂XML文件)相关推荐
- 【Python基础】一文看懂 Pandas 中的透视表
作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...
- AI基础:一文看懂BERT
0.导语 自google在2018年10月底公布BERT在11项nlp任务中的卓越表现后,BERT(Bidirectional Encoder Representation from Transfor ...
- Java是什么?(零基础也能轻松看懂)
目录 引子 那到底什么是java呢? 1. Java的运行环境与运行机制 1.1 编译语言 1.2 解释语言 1.3 关于Java语言 2.JDK.JRE具体介绍 2.1 JDK:Java开发环境包 ...
- 工程打包是什么意思_太生动形象了!500个建筑施工3D动画演示,施工工艺一目了然,零基础工程人也能看懂...
在建筑行业干了这么多年,老杨深知其中的艰辛.刚毕业的时候去了中建,那时候带我的老师傅很忙,天天都让看书,看得头晕眼花,不懂的地方也不好意思去问,后来还是一个同事给了这500个建筑施工3D动画演示,涵盖 ...
- 光纤中的多种光学模式芯径_光纤基础知识介绍,看懂这一篇就够!
弱电监控系统中,当链路传输距离超过100米后,我们就会考虑使用光纤传输,光纤具有抗干扰能力强,传输距离远,带宽大等优势,今天我们就来一起聊聊光纤的基础知识! 1.光纤的定义 光纤是一种柔软.纤细的固态 ...
- 零基础小白都能看懂的Java处理高并发的3种解决方案
高并发是互联网应用的一大特色,也是互联网应用不可避免的问题;比如淘宝双11.京东618.12306春节火车票,促销.秒杀等等. 一.什么是高并发 高并发(High Concurrency)是互联网分布 ...
- 前端必读 0基础学习 一文看懂 Vue3 对比 Vue2 发生哪些变化
望本篇文章能帮你加深对 Vue 的理解,能信誓旦旦地说自己熟练Vue2/3. 内容混杂用法 + 原理 + 使用小心得,建议收藏,慢慢看. 区别 生命周期的变化 整体来看,变化不大,只是名字大部分需要 ...
- 0基础:教你看懂HTML5
2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京爱创课堂原创文章,未经允许不得转载. 如果你对C语言.网站制作等技术没有什么了解,你可以查看这篇文章.无论 ...
- 【Java基础】10分钟看懂Java NIO
一.IO概述 IO的操作方式通常分为几种:同步阻塞BIO.同步非阻塞NIO.异步非阳塞AIO 1.在JDK1.4之前,我们建立网络连接的时候采用的是 BIO 模式. 2.Java NIO(New IO ...
最新文章
- 图解 SQL,这也太形象了吧!
- 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
- Asp.Net Core Filter 深入浅出的那些事-AOP
- 数据分割-并查集+set
- 技术转管理?这些“坑”你要绕道走
- 从java进程里dump出类的class文件的小工具--dumpclass
- 华为第二批“十大军团”正式成立!
- eth java,一个轻量级的Java实现的ETH库
- linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输...
- Linux查看分析任务计划命令,Linux任务计划crontab
- 转贴:win2008改造成准VISTA
- .net core linux 串口,.Net Core 跨平台应用使用串口、串口通信 ,可能出现的问题、更简洁的实现方法...
- LaTeX软件安装及简易入门
- 蓝屏(BSOD)转储设置,看本文就够了!
- linux下kegg注释软件,网页工具KOBAS进行KEGG富集分析
- css 打造3D导航
- 计算机分子模拟的意义包括,计算机分子模拟
- 【自动驾驶】高精地图在无人驾驶中的应用
- C语言中唯一的一个三目运算符(条件运算符)
- 数字认证公司的bjca证书报错原因,垃圾产品