XML(一)XML大揭秘
前言
每天都要学习很多新的知识,比你厉害的程序员比你还努力,那你混的下这口饭吗?所以不抱怨,坚持!接下来给大家分享的是xml。可能很多做开发的都遇到过xml,
比如maven,各种框架的配置文件都有,但是你有没有深入的去了解一下xml呢?xml是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
一、XML简介
1.1、XML简单的历史介绍
1969年 GML (General Markup Language,通用标记语言):
用于计算机之间的通信,通信就会传输数据,那么就需要一种数据的规范。
1985年 SGML (Standard General Markup Language,标准通用标记语言):对GML进行完善。
1993年 HTML (Hyper Text Markup Language,超文本的标记语言):
随着万维网的推广,在SGML的基础上,又出现了HTML语言,用于万维网上的页面展示。
1998年 XML (Extensible Markup Language,可扩展的标记语言):
HTML有不少的缺陷,HTML语言的标记不能自定义,只能使用固定的有限的标记;
HTML语言的标记本身不能用来描述数据,HTML语言的标记没有国际化(不同浏览器显示同一页面的效果可能不一样),只侧重于对内容的显示。
随着Web上数据的增多,这些HTML存在的缺点就变的不可被忽略。
W3C提供了HTML的几个扩展用来解决这些问题,最后,W3C组织在1998年推出了可扩展标记语言XML。
1.2、认识XML
XML指可扩展标记语言(Extensible Markup Language)
XML是一种标记语言,很类似HTML
XML的设计宗旨是传输数据,而非显示数据。
XML标签没有被预定义,您需要自行定义标签
XML被设计为具有自我描述性
XML是 W3C 的推荐标准
1.3、XML与HTML的主要差异
XML不是HTML的替代,XML和HTML为不同的目的而设计。
XML被设计为传输和存储数据,其焦点是数据的内容。
HTML被设计用来显示数据,其焦点是数据的外观。
HTML旨在显示信息,而XML旨在存储和传输信息。
1.4、XML的作用
数据传输,数据可读性高,可扩展。使用XML文件传输数据,现在已经被越来越多的项目所采纳。
结构化明确,自我描述能力强,描述带关系的数据(作为软件的配置文件),如tomcat、mybatis、hibernate、spring,struts等
充当小型文本数据库。
二、XML文档规则——如何构建一个良构的XML文档
2.1、XML文档必须有根元素
XML必须包含根元素,它是所有其他元素的父元素,比如:
以下实例中“root”就是根元素:
// 1 <root>
// 2 <child>
// 3 <subchild>.....</subchild>
// 4 </child>
// 5 </root>
以下实例中“note”是根元素:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
2.2、XML声明
XML声明是XML文件的可选部分,如果存在必须放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
以上实例包含XML版本,以及该XML文档所使用的编码;
UTF-8也是HTML5,CSS,JavaScript,PHP和SQL的默认编码。
2.3、所有的XML元素都必须有一个关闭标签
在HTML中,某些元素不必有一个关闭标签;例如:
<p>This is a paragraph.
<br>
在XML中,省略关闭标签是非法的。所有元素都必须有关闭标签:
<p>This is a paragraph.</p>
<br />
<class />中间没有数据可以写成这样
2.4、XML对大小写敏感
XML标签对大小写敏感。标签<Letter>与标签<letter>是不同的。
必须使用相同的大小写来编写开始标签和结束标签:
<Message>This is incorrect</message> // 错误的XML标签书写
<message>This is correct</message> // 正确的XML标签书写
2.5、XML必须正确嵌套
在HTML中,常会看到没有正确嵌套的元素:<b><i>This text is bold and italic</b></i>
在XML中,所有元素都必须彼此正确地嵌套:<b><i>This text is bold and italic</i></b>
2.6、XML属性值必须加引号
与HTML类似,XML元素也可拥有属性(名称/值的对),并且在同一标签中属性不能重复。
在XML中,XML的属性值必须加引号,而且必须有值(就算一个空格也行)。
<!-- 错误的属性书写方式 -->
<note date=//>
<to>Tove</to>
<from>Jani</from>
</note> <!-- 正确的属性书写方式 -->
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>
2.7、PCDATA与CDATA
PCDATA(Parsed Character Data):指可以被xml解析器解析的内容,有些特殊字符需要借助实体来被解析器解析,XML中的正常内容都是属于PCDATA。
CDATA(Character Data):指不会被xml解析器解析的内容,按照字符串原样输出。
语法:<![CDATA[要原样输出的内容]]>
如:<![CDATA["你好啊 &"'abc"]]>
输出结果:"你好啊 &"'abc"
2.8、实体引用
在XML中,一些字符拥有特殊的意义。如果您把字符"<"放在XML元素中,会发生错误,这是因为解析器会把它当作新元素的开始。以下实例会产生XML错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 "<" 字符:
<message>if salary < 1000 then</message>
在XML中,有5个预定义的实体引用:
< < less than(小于号)
> > greater than(大于号)
& & ampersand(与)
' ' apostrophe(单引号)
" " quotation mark(双引号)
自定义实体:
语法:
<!DOCTYPE 根元素名[
<!ENTITY 实体名 实体内容 >
<!ENTITY 实体名 实体内容 >
...
]>
例如:相同的内容重复出现,可以定义一个实体
<!DOCTYPE students[
<!ENTITY address "江西省南昌市南昌县">
]>
实体名:address,使用方法:&address;实体可出现的位置:标签内容,属性值,以及作为其他实体的值。
注:重复定义相同名称的实体时,以写在第一位的为准。
2.9、XML中的注释
在XML中编写注释的语法与HTML的语法很相似。<!-- This is a comment -->
注释可以出现在任意位置。
注释不可嵌套使用。
2.10、XML的空格问题
HTML会把多个连续的空格字符裁减(合并)为一个。例如:
代码:<p>这是 两 本书</p>
显示:这是 两 本书
在XML中,把多个连续的空格字符裁减(合并)为一个。
代码:<p>这是 两 本书</p>
显示:这是 两 本书
2.11、XML的树形结构
XML文档形成了一种树型结构,它从“根部”开始,然后扩展到“枝叶”。叶子:文本标签(没有具体体现)的值
XML文档必须包含根元素。该元素是所有其他元素的父元素。
XML文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有的元素都可以有子元素。
父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。
所有的元素都可以有文本内容和属性(类似HTML)。
注:更多关于XML树形结构请参见:http://www.runoob.com/xml/xml-tree.html
三、XML的处理指令与命名空间的问题
3.1、XML的处理指令
处理指令,简称PI(Processing Instruction),处理指令告诉我们解析引擎采用什么方式解析xml文档内容;
处理指令以“<?”开头,以“?>”结尾,xml头部声明就是最常见的一种处理指令,告诉解析器采用什么字符编码解析内容。
xml文档中可以有多个处理指令。
举例:xml-stylesheet处理指令,通知解析引擎使用css文件去显示xml文档内容
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="style.css" ?>
<students>
<name>张三</name>
<age></age>
</students> style.css: name{
font-size:30px;
color:red;
}
age{
font-size:50px;
color:green;
}
处理指令很少被使用。主要用于链接XML文档到样式表。
3.2、XML的命名空间
在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
举例:
在students1.xml中:
<students>
<student>
<name>张三</name>
</student>
<student>
<name>李四</name>
</student>
</students>
students1.xml
在students2.xml中:
<students>
<student>
<name>张三</name>
</student>
<student>
<name>李四</name>
</student>
</students>
students2.xml
两个文档中都有students、student标签,一起使用时会发生命名冲突
解决方法:
1)使用命名空间
语法:xmlns:namespace-prefix="namespaceURI"(一般都是公司的域名)
使用范围:当前标签以及子标签
在students1.xml中:
<students1:students xmlns:students1="http://briup.com/students1">
<students1:student>
<students1:name>张三</students1:name>
</students1:student>
<students1:students>
students1.xml
与仅仅使用前缀不同,我们为<students>标签添加了一个xmlns属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
注:用于标示命名空间的url不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。
2)使用默认的命名空间
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作
语法:xmlns="namespaceURL"
<students xmlns="http://briup.com/students1">
<student>
<name>张三</name>
</student>
<students>
students1.xml
XML(一)XML大揭秘的更多相关文章
- XML 与 JSON大PK
导读 XML 和 JSON 是现今互联网中最常用的两种数据交换格式.XML 格式由 W3C 于 1996 年提出.JSON 格式由 Douglas Crockford 于 2002 年提出.虽然这两种 ...
- 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术
在大数据项目开发过程中,ETL(Extract-Transform-Load)是必不可少.即便目前 JSON 非常流行,开发人员也有必定会有对远古系统的挑战,而 XML 格式的数据源作为经典存在浑身上 ...
- hadoop三个配置文件的参数含义说明core-site.xml,hdfs-site.xml,mapred-site.xml
配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有哪些配置可以生 ...
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
- Linq to XML操作XML文件
LINQ的类型 在MSDN官方文件中,LINQ分为几种类型: . LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本 ...
- Java SE之XML<二>XML DOM与SAX解析
[文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(D ...
- springmvc.xml,context.xml和web.xml
1:springmvc.xml配置要点 一般它主要配置Controller的组件扫描器和视图解析器 下为:springmvc.xml文件 <?xml version="1.0" ...
- HTTP 响应实体主体:XML 及 XML parser
本文内容 HTTP 响应实体主体:XML XML parser 总结 各编程语言实现的 XML parser HTTP 响应实体主体:XML 实体主体(entity-body)通常是HTTP响应里 ...
- 【腾讯Bugly干货分享】iOS黑客技术大揭秘
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5791da152168f2690e72daa4 “8小时内拼工作,8小时外拼成长 ...
- XML 参考:XML基础 XML 简介
XML 参考:XML基础 -- XML简介和用途 转:http://www.cnblogs.com/Dlonghow/archive/2009/01/22/1379799.html XML 参考:XM ...
随机推荐
- linux根目录扩容
原来在ucloud上面买了一个服务器,结果根目录上面只有20G,/data挂载点下面有500G,没多久/根目录存储空间用完了,所以要扩展 linux的文件模式分为lvm模式和普通的非lvm模式,云服务 ...
- 【HTML5】HTML5新布局元素
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 将Maven的Web项目部署到windows的Tomcat里
这里我用的是win7和tomcat8,且tomcat8下载的是压缩包而非安装文件. 第一步:先将tomcat8安装服务,cmd里更改目录为tomcat8(即压缩包解压后的那个文件夹)的bin文件夹, ...
- 编译c语言程序扩展ruby
环境: windows 10 64bit ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32] gcc version 4.8.1 (GC ...
- elasticsearch 源码本地环境搭建
elasticsearch6.0.0 源码本地环境搭建步骤如下: 1.资源准备 ElasicSearch版本:6.0.0: https://github.com/elastic/elasticsear ...
- 关于python中的dir函数
dir函数用于查看python对象的属性,如果所查看的python对象已经定义了__dir__方法,则使用dir会返回定义的__dir__方法的返回值.如果没有定义__dir__方法,则会从__dic ...
- ES6(三)数组的扩展
1.Array.form ES6中,Array.from = function(items,mapfn,thisArg) { } Array.from 用于将 类数组 和 可遍历对象(实现了It ...
- Android中Handler的消息处理机制以及源码分析
在实际项目当中,一个很常见的需求场景就是在根据子线程当中的数据去更新ui.我们知道,android中ui是单线程模型的,就是只能在UI线程(也称为主线程)中更新ui.而一些耗时操作,比如数据库,网络请 ...
- ASP.NET Core学习之一 入门简介
一.入门简介 在学习之前,要先了解ASP.NET Core是什么?为什么?很多人学习新技术功利心很重,恨不得立马就学会了. 其实,那样做很不好,马马虎虎,联系过程中又花费非常多的时间去解决所遇到的“问 ...
- 【转载】MySQL事务以及SELECT ... FOR UPDATE的使用
MySQL中的事务,默认是自动提交的,即autocommit = 1: 但是这样的话,在某些情形中就会出现问题:比如: 如果你想一次性插入了1000条数据,mysql会commit1000次的, 如果 ...