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”

如下:

XML基础(一)(只管能看懂XML文件)相关推荐

  1. ​【Python基础】一文看懂 Pandas 中的透视表

    作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...

  2. AI基础:一文看懂BERT

    0.导语 自google在2018年10月底公布BERT在11项nlp任务中的卓越表现后,BERT(Bidirectional Encoder Representation from Transfor ...

  3. Java是什么?(零基础也能轻松看懂)

    目录 引子 那到底什么是java呢? 1. Java的运行环境与运行机制 1.1 编译语言 1.2 解释语言 1.3 关于Java语言 2.JDK.JRE具体介绍 2.1 JDK:Java开发环境包 ...

  4. 工程打包是什么意思_太生动形象了!500个建筑施工3D动画演示,施工工艺一目了然,零基础工程人也能看懂...

    在建筑行业干了这么多年,老杨深知其中的艰辛.刚毕业的时候去了中建,那时候带我的老师傅很忙,天天都让看书,看得头晕眼花,不懂的地方也不好意思去问,后来还是一个同事给了这500个建筑施工3D动画演示,涵盖 ...

  5. 光纤中的多种光学模式芯径_光纤基础知识介绍,看懂这一篇就够!

    弱电监控系统中,当链路传输距离超过100米后,我们就会考虑使用光纤传输,光纤具有抗干扰能力强,传输距离远,带宽大等优势,今天我们就来一起聊聊光纤的基础知识! 1.光纤的定义 光纤是一种柔软.纤细的固态 ...

  6. 零基础小白都能看懂的Java处理高并发的3种解决方案

    高并发是互联网应用的一大特色,也是互联网应用不可避免的问题;比如淘宝双11.京东618.12306春节火车票,促销.秒杀等等. 一.什么是高并发 高并发(High Concurrency)是互联网分布 ...

  7. 前端必读 0基础学习 一文看懂 Vue3 对比 Vue2 发生哪些变化

    望本篇文章能帮你加深对 Vue 的理解,能信誓旦旦地说自己熟练Vue2/3. 内容混杂用法 + 原理 + 使用小心得,建议收藏,慢慢看. 区别 生命周期的变化 整体来看,变化不大,只是名字大部分需要 ...

  8. 0基础:教你看懂HTML5

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京爱创课堂原创文章,未经允许不得转载. 如果你对C语言.网站制作等技术没有什么了解,你可以查看这篇文章.无论 ...

  9. 【Java基础】10分钟看懂Java NIO

    一.IO概述 IO的操作方式通常分为几种:同步阻塞BIO.同步非阻塞NIO.异步非阳塞AIO 1.在JDK1.4之前,我们建立网络连接的时候采用的是 BIO 模式. 2.Java NIO(New IO ...

最新文章

  1. 图解 SQL,这也太形象了吧!
  2. 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
  3. Asp.Net Core Filter 深入浅出的那些事-AOP
  4. 数据分割-并查集+set
  5. 技术转管理?这些“坑”你要绕道走
  6. 从java进程里dump出类的class文件的小工具--dumpclass
  7. 华为第二批“十大军团”正式成立!
  8. eth java,一个轻量级的Java实现的ETH库
  9. linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输...
  10. Linux查看分析任务计划命令,Linux任务计划crontab
  11. 转贴:win2008改造成准VISTA
  12. .net core linux 串口,.Net Core 跨平台应用使用串口、串口通信 ,可能出现的问题、更简洁的实现方法...
  13. LaTeX软件安装及简易入门
  14. 蓝屏(BSOD)转储设置,看本文就够了!
  15. linux下kegg注释软件,网页工具KOBAS进行KEGG富集分析
  16. css 打造3D导航
  17. 计算机分子模拟的意义包括,计算机分子模拟
  18. 【自动驾驶】高精地图在无人驾驶中的应用
  19. C语言中唯一的一个三目运算符(条件运算符)
  20. 数字认证公司的bjca证书报错原因,垃圾产品

热门文章

  1. 无线网卡插上电脑没反应的解决办法
  2. Haar特征类有哪些最新发表的毕业论文呢?
  3. Ubuntu 20.4 安装 Sublime Text 步骤
  4. Bootstrap布局之移动开发基础加容器
  5. 1 查看各类型数据库版本
  6. 深富策略:节前大概率休整,节后有望迎来反攻
  7. WindowsServerAppFabric安装配置失败,如何解决?
  8. 【LeetCode33】搜索旋转排序数组
  9. matlab傅里叶变换 绘图
  10. Win 11 配置Java环境变量x64位操作系统