XML知识(一)

一、初识XML
    “当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴。有史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它不仅仅可以用于 WEB,而且可以被用于任何地方。”


    ---《Designing With Web Standards Second Edition》(网页标准设计第二版), Jeffrey Zeldman


    XML全称EXtensible Markup Language,翻译为可扩展置标语言,可扩展标记语言或可延伸标示语言,设计用来传输和存储数据。
 1.1XML简单的历史介绍
1969年 GML   通用标记语言
用于计算机之间的通信,通信就会传输数据,那么就需要一种数据的规范
1985年 SGML  标准通用标记语言
对GML进行完善
1993年 HTML  超文本的标记语言(HyperText Markup Language)
随着万维网的推广,在SGML的基础上,又出现了HTML语言,用于万维网上的页面展示
1998年 XML   可扩展的标记语言(Extensible Markup Language)
HTML有不少的缺陷,HTML语言的标记不能自定义,只能使用固定的有限的标记,HTML语言的标记本身不能用来描述数据,HTML语 言的标记 没有国际化(不同浏览器显示同一页面的效果可能不一样),只侧重于对内容的显示。随着Web上数据的增多,这些HTML存在的        缺点就变的不可被忽略。W3C提供了HTML的几个扩展用来解决这些问题,最后,W3C组织在1998年推出了可扩展标记语言XML。
XML语言的本身是用来替代HTML语言的,但是两种语言还有一定差异的,所以中间出现了一种过渡的语言:XHTML,但实际上XML语 言已经很难替代HTML语言了,因为HTML语言的使用在整个万维网上使用太广泛了。现在XML被用来传输与存储数据,HTML用来显示数据。
 1.2什么是 XML?
    XML指可扩展标记语言(EXtensible Markup Language)
  XML是一种标记语言,很类似 HTML
  XML的设计宗旨是传输数据,而非显示数据。
  XML标签没有被预定义,您需要自行定义标签
  XML被设计为具有自我描述性
  XML是 W3C 的推荐标准
 1.3XML与HTML的主要差异
XML 不是 HTML 的替代,XML 和 HTML 为不同的目的而设计。
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
 1.4XML的作用
1)数据传输,数据可读性高,可扩展。使用XML文件传输数据,现在已经被越来越多的项目所采纳。
2)结构化明确,自我描述能力强,描述带关系的数据(作为软件的配置文件),如tomcat、mybatis、hibernate、spring,struts等
3)充当小型文本数据库。
 1.5认识XML
xml用来结构化存储以及传输信息
如下面这个例子,john给George写了一个便签,存储为XML:
<note>
<to>George</to>
<from>john<from/>
<heading>reminder</heading>
<body>don't forget the meeting</body>
</note>
上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息,信息被包装在xml的标签中,我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
xml是普通的纯文本文档,使用特定的标签存储有特定的信息,我们可以编写相应的程序去解析xml文档的内容。
  通过xml可以定义属于自己的标签。
上例中的标签没有在任何 XML 标准中定义过(比如 <to> 和 <from>)。这些标签是由文档的创作者发明的。这是因为 XML 没有预定义的标签,XML 允许创作者定义自己的标签和自己的文档结构。(如在 HTML 中使用的标签都是在 HTML 标准预定义的)
二、XML语法
 2.1文档声明
xml文件是以.xml结尾的文件
xml文件要求有一个头部声明,告诉解析器一些信息,放在文件首行,使用eclispe创建xml文档,会自动生成文档声明。
<?xml version="1.0" encoding="UTF-8"?>
<? ?>:处理指令的格式(后边),xml指明文件为xml文档,version指明xml版本为1.0,encoding指明xml解析引擎采用字符编码UTF-8解析文件(注:)
处理指令还有其他类型,之后会讲到。
 2.2标签与元素
    2.21标签(标记)
开始标签<one>
元素内容(可以是字符,标签)
结束标签</one>
xml中,开始标签与结束标签是必须都有的
表现形式:
1.包含标签体<two>信息2<two/>
2.不包含标签体<three></three>,也可写为<three/>
3.标签之间的嵌套:
<one>
<two>信息2</two>
<three/>
</one>
  一个标签中可以合理嵌套其他子标签,不能交叉嵌套:
 <one>
<two>
 </one>
</two>
标签命名:
1.以字母或_开头,后接数字,字母,_,以及其他的字符(-,.:),名称不能以数字或者标点符号开始
2.名字中不允许出现空格。
3.2.大小写敏感  <Sname></sname> //error
4.不能使用w3c的保留字xml
XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。
    2.22根元素:XML文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
每个XML文档必须有且只有一个根元素。(最大范围的开始结束标签)
根元素是一个完全包括文档中其他所有元素的元素。
根元素的起始标记要放在所有其他元素的起始标记之前。
根元素的结束标记要放在所有其他元素的结束标记之后
<student>
<name></name>
<age></age>
<address>
<province></province>
<city></city>
</address>
</student>
根元素:student
注意:在xml的标签中出现的空格与换行,xml的解析程序也会当做标签内容进行处理,例如下面两个标签意义是不同的:
<name>tom</name>与
<name>
tom
</name>
   由于在xml中,空格与换行都被当做原始内容进行处理,所以在编写xml文件时需要注意。在一些已经封装好的解析方法中是可以忽            略掉这些空格和换行的,如一些第三方jar包中。


 2.3属性
出现在开始标签内:
<元素名 属性名="属性值"> ,属性值用双引号("")或者单引号('')分隔
如:<student id="001"> 属性名:id,属性值:001,所属元素:student
一个元素可以有多个属性,但不能出现重复的属性名
<student id="001" name="张三" age='12'>
属性值不能出现"<","&"等特殊符号
<student name="zhang<san">   error
   良构:拥有正确语法的 XML 被称为“形式良好”的 XML
 2.4实体(ENTITY)
xml中有些特殊字符是不能直接表示出来的比如 < ,解析器会认为 < 是一个标签的开始,而不是元素内容。所以由实体(ENTITY)来表 示,xml规范中预定义的实体有:
< &lt;
> &gt;
& &amp;
" &quot;
' &apos;
实体的使用方法:&实体名;
严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。比如作为标签内容或者属性值,省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯有时候为了给某些较长的字符信息等设置缩写形式,方便输出时,我们可以自定义实体:
address ---- 江苏省苏州市昆山市巴城镇学院路828号浦东软件园
语法:
<!DOCTYPE 根元素名[
<!ENTITY 实体名 "实体内容" >
<!ENTITY 实体名 "实体内容" >
...
]>
<!DOCTYPE students[
<!ENTITY address "江苏省苏州市昆山市学院路828号浦东软件园">
]>
实体名:address,使用方法:&address;实体可出现的位置:标签内容,属性值,以及作为其他实体的值。
注:重复定义相同名称的实体时,以写在第一位的为准;
 2.5注释
语法:<!--注释内容-->
注:注释内容中不要出现"--"
   注释可出现的位置:除了标签以外的任意位置 <student <!--学生标签-->></student> error
   注释不可嵌套使用                    <!--student标签内容<!--student标签内容-->--> error
 2.6PCDATA与CDATA
PCDATA(parsed character data):指可以被xml解析器解析的内容,有些特殊字符需要借助实体来被解析器解析,xml中的正常
内容都是属于PCDATA。
CDATA(character data):指不会被xml解析器解析的内容,按照字符串原样输出。有些内容不希望被解析器解析,原本是什么样的
字符串,输出之后还是显示原本的内容,这种情况下使用CDATA指明。
语法: <![CDATA[要原样输出的内容]]>
如:<![CDATA["你好啊      &amp;&quot;&apos;abc"]]> 输出结果:"你好啊 &amp;&quot;&apos;abc"
出现位置:标签内容中
 2.7处理指令
处理指令,简称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>20</age>
</students>


style.css:
name{
font-size:30px;
color:red;
}
age{
font-size:50px;
color:green;
}


处理指令很少被使用。主要用于链接 XML 文档到样式表。


2.8命名空间
在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
如:JD1701.xml中:
<students>
<student>
<name>张三</name>
</student>
<student>
<name>李四</name>
</student>
</students>
JD1702.xml中
<students>
<student>
<name>张三</name>
</student>
<student>
<name>王五</name>
</student>
</students>
两个文档中都有students、student标签,一起使用时会发生命名冲突
    解决方法:
     1)使用命名空间
语法:xmlns:namespace-prefix="namespaceURI"
JD1701.xml中:
<jd1701:students xmlns:jd1701="http://briup.com/jd1701">
<jd1701:student>
<jd1701:name>张三</jd1701:name>
</jd1701:student>
<jd1701:students>
我们为<students>标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
   当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
   注:用于标示命名空间的url不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作 为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。
      2)使用默认的命名空间:
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作
语法:xmlns="namespaceURL"
<students xmlns="http://briup.com/jd1701">
<student>
<name>张三</name>
</student>
<students>
和上面的效果是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值