目录
❀My学习小记录之XML❀
一、简介
++xml++ (eXtensible Markup Language )的格式,++可扩展标记语言++ (标准通用标记语言的子集)是一种简单的++数据存储++语言。使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然可扩展标记语言占用的空间比二进制数据要占用更多的空间,但可扩展标记语言极其简单易于掌握和使用。
可扩展标记语言(XML)与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML的宗旨传输数据的,而与其同属标准通用标记语言的HTML主要用于显示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。
XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。
XML作用:
:) 作为微型数据库,存储数据;
作为通信数据;
用于不同平台,不用系统交换数据;
作为配置文件,为应用程序配置数据;
结合样式表语言,展示数据。
二、发展历程
XML历史:
gml(1969)->sgml(1985)->html(1993)->xml(1998)
- 1969 gml(通用标记语言),主要目的是要在不同的机器之间进行通信的数据规范
- 1985 sgml(标准通用标记语言)
- 1993 html(超文本标记语言,www网)
- 1998 xml extensiable markup language 可扩展标记语言
html语言本身是有一些缺陷的:(
(1)不能自定义标签
(2)html本身缺少含义
(3)html没有真正的国际化
有一个中间过渡语言,xhtml: html->xhtml->xml
同HTML一样, 可扩展标记语言是标准通用标记语言的一个子集,它是++描述网络上的数据内容和结构的标准++ 。尽管如此,XML不像HTML,++HTML仅仅提供了在页面上显示信息的通用方法++(没有上下文相关和动态功能) ,XML则++对数据赋予上下文相关功能++,它继承了标准通用标记语言的大部分功能,却使用了不太复杂的技术。
为了使得标准通用标记语言显得用户友好,XML重新定义了标准通用标记语言的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得标准通用标记语言在设计网站时显得复杂化。XML保留了标准通用标记语言的结构化功能,这样就使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。
因为XML是万维网联盟 (World Wide Web Consortium W3C)制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法。因为XML是个公共格式,它不专属于任何一家公司,你不必担心XML技术会成为少数公司的盈利工具,XML不是一个依附于特定浏览器的语言。
可扩展标记语言是从称为标准通用标记语言的更加古老的语言派生出来的。标准通用标记语言的主要目的是定义使用标签来表示数据的标记语言的语法。
三、XML常见应用
(1)XML的出现解决了程序间数据传输的问题
比如QQ之间的数据传送,用XML格式来传送数据,具有良好的可读性,可维护性。
(2)XML可以做配置文件
XML文件做配置文件可以说非常普遍,比如我们的Tomcat服务器的server.xml,web.xml。再比如我们的structs中的structs-config.xml文件,和hibernate的hibernate.cfg.xml等等。
(3)XML可以充当小型的数据库
XML文件可以做小型数据库,也是不错的选择,我们程序中可能用到一些经常要人工配置的数据,如果放在数据库中读取不合适(因为这会增加维护数据库的工作),则可以考虑直接用XML来做小型数据库。这种方式直接读取文件显然要比读数据库快。比如msn中保存用户聊天记录就是用XML文件。
入门案例:用XML来记录一个班级信息。
XML
<?xml version="1.0" encoding="gb2312"?>
<class>
<stu id="001">
<name>杨过</name>
<sex>男</sex>
<age>20</age>
</stu>
<stu id="002">
<name>小龙女</name>
<sex>女</sex>
<age>21</age>
</stu>
</class>
在这个例子中,如果我们把第一行的编码改为utf-8,再用浏览器打开会报错,这是为什么呢?
因为xml文件的默认编码是ANSI ,即美国国家标准协会制定的编码,它根据不同的国家和地区制定了不同的标准,那么在中国就是GB2312,所以我们用GB2312编码不会出错,而用UTF-8会报错。 解决办法就是将该XML文件更改为UTF-8的编码模式即可。
四、语法格式及相关介绍
语法:
一个XML文件分为如下几部分内容:
1.文档声明
2.元素
3.属性
4.注释
5.CDATA区、特殊字符
6.处理指令(processing instruction)
格式声明(指令):
大多数XML文档以XML声明作为开始,它向解析器提供了关于文档的基本信息。建议使用XML声明,但它不是必需的。如果有的话,那么它一定是文档的第一行内容。例如:
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
version --文档符合XML1.0规范,我们学习1.0
encoding --文档字符编码,比如"GB2312"或者"UTF-8"
standalone --文档定义是否独立使用
**standalone="no"**为默认值。yes代表是独立使用,而no代表不是独立使用
元素:
- 一份XML文档中有且只有一个++根元素++。根元素是一个完全包括文档中其他所有元素的元素;根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后
- 根元素下的所有元素叫"++子元素++"
- 不包含子元素的元素叫"++叶子++ ";包含子元素的元素叫"++分支++"
XML元素指的是XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写方式,例如
- 包含标签体:
XML
<a>www.sohu.com</a>
- 不含标签体的:
XML
<a></a>,简写为:<a/>
(4)对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。例如下面两段内容的意义是不一样的。
XML
<stu>xiaoming</stu>
- 和如下:
XML
<stu> xiaoming</stu>
(5)由于在XML中,空格 和换行都作为原始内容被处理,所以,在编写XML文件时,要特别注意。
(6)命名规范:一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守以下规范:
- 区分大小写,例如,元素P和元素p是两个不同的元素
- 名字中可以包含字母、数字以及其它字母或文字;还可包含下划线(_)、点(.)、连字符(-)
- 不能以数字或下划线"_"开头
- 元素内不能包含空格
- 名称中间不能包含冒号(:)
- 名字不能以字母xml (或XML 或Xml ..) 开头
- 可以使用中文,但一般不这么用
标记(标签):
- 可以在可扩展标记语言文件的内容包括几乎所有的万国码Unicode字符,元素和属性的名称也可以由非ascii字符组成
- 标签由包围在一个小于号<和一个大于号>之间的文本组成,例如**<标记>**
- 起始标签(外国语:starttag)表示一个特定区域的开始,例如**<起始>**
- 结束标签(外国语:end tag)定义了一个区域的结束,除了在小于号之后紧跟着一个斜线(/)外,和起始标签基本一样,例如**</结束>**
- 标准通用标记语言还定义了标签的特性"属性",它们是定义在小于号和大于号之间的值,例如中的"源"特性。如果你觉得它看起来很熟悉的话,应该知道,基于标准通用标记语言的语言的最著名实现就是原始的HTML。
属性:
XML
<student id="100">
<name>Tom</name>
</student>
(1)属性值用++双引号(")++ 或++单引号(')++ 分隔,如果属性值中有单引号,则用双引号分隔;如果有双引号,则用单引号分隔。那么如果属性值中既有单引号还有双引号怎么办?这种要使用实体(转义字符,类似于html中的空格符),XML有++5个预定义的实体字符++,如下:
<< >> &= &apos' " "
(2)一个元素可以有多个属性,它的基本格式为:
XML
<元素名 属性名1="属性值1" 属性名2="属性值2">
(3)特定的属性名称在同一个元素标记中只能出现一次
(4)属性值不能包括<,&,>如果一定要包含,也要使用实体
注释:
XML的注释类似于HTML中的注释:
XML
<!--这是一个注释-->
(1)注释内容不要出现--
(2)不要把注释放在标记中间
(3)注释不能嵌套
(4)可以在除标记以外的任何地方放注释
CDATA节
假如有这么一个需求,需要通过XML文件传递一幅图片 ,怎么做呢?其实我们看到的电脑上的所有文件,本质上都是字符串,不过它们都是++特殊的二进制字符串++。我们可以通过XML文件将一幅图片的二进制字符串传递过去,然后再解析成一幅图片。那么这个字符串就会包含大量的,&或者"等一些特殊的不合法的字符。这时候解析引擎是会报错的。
所以,有些内容可能不想让解析引擎解析执行,而是当做原始内容处理,用于把整段文本解释为纯字符数据而不是标记。这就要用到CDATA节。
语法如下:
XML
<![CDATA[
......
]]>
CDATA节中可以输入任意字符(除]]>外),但是不能嵌套!
如下例,这种情况它不会报错,而如果不包含在CDATA节中,就会报错:
XML
<stu id="001">
<name>杨过</name>
<sex>男</sex>
<age>20</age>
<intro><![CDATA[ad<<&$^#*k]]></intro>
</stu>
处理指令
处理指令,简称PI(processing instruction)。处理指令用来指示解析引擎如何解析XML文件,看下面一个例子:
比如我们也可以使用css样式表来修饰XML文件,编写my.css如下:
css
name{
font-size:80px;
font-weight:bold;
color:red;
}
sex{
font-size:60px;
font-weight:bold;
color:blue;
}
sex{
font-size:40px;
font-weight:bold;
color:green;
}
我们在xml文件中使用处理指令引入这个css文件,如下:
XML
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet href="my.css" type="text/css"?>
<class>
<stu id="001">
<name>杨过</name>
<sex>男</sex>
<age>20</age>
</stu>
<stu id="002">
<name>小龙女</name>
<sex>女</sex>
<age>21</age>
</stu>
</class>
这时候我们再用浏览器打开这个xml文件,会发现浏览器解析出一个带样式的视图,而不再是单纯的目录树了:
但是XML的处理指令不要求掌握,因为用到的很少。