深入学习XML
什么是XML
1. XML是EXtensible Markup Language的缩写
2. XML是一种类似于HTML的标记语言
3. XML是用来描述数据的
4. XML的标记不是在XML中预定义的,你必须定义自己的标记
5. XML使用文档类型定义(DTD)或者模式(Schema)来描述数据
6. XML使用DTD或者Schema后就是自描述的语言
XML是用来存放数据的
XML不是HTML的替代品,XML和HTML是两种不同用途的语言。
XML是被设计用来描述数据的,重点是:什么是数据,如何存放数据。
HTML是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。
HTML是与显示信息相关的, XML则是与描述信息相关的。
XML 语法
一个XML文档的例子
|
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Lin</to> <from>Ordm</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> |
文档的第1行:XML声明——定义此文档所遵循的XML标准的版本,在这个例子里是1.0版本的标准,使用的是ISO-8859-1 (Latin-1/West European)字符集。
文档的第2行是根元素(就象是说“这篇文档是一个便条”);
文档的第3--6行描述了根元素的四个子节点(to, from, heading,和 body);
文档的最后一行是根元素的结束,在XML文档中, 忽略结束标记是不符合规定的。
1. XML标记都是大小写敏感的
2. 所有XML文档都必须包含一个单独的标记来定义,所有其他元素的都必须成对的在根元素中嵌套。XML文档有且只能有一个根元素
3. 属性值必须使用引号""
4. 使用XML,空白将被保留
5. 使用XML, CR / LF 被转换为 LF
6. XML中的注释:<!-- 这是一个注释 -->
属性VS元素
应该尽量避免使用属性
1. 属性不能包含多个值(子元素可以)。
2. 属性不容易扩展。
3. 属性不能够描述结构(子元素可以)。
4. 属性很难被程序代码处理。
5. 属性值很难通过DTD进行测试。
但是如果能够同时避免以上所有问题的话,就应该使用属性,例如ID.
XML验证
通过DTD和Schema可以验证一个XML文档是不是正确的。
DTD定义了XML文档中可用的合法元素。DTD的意图在于定义XML文档的合法建筑模块。他通过定义一系列合法的元素决定了XML文档的内部结构。
XML Schema(XML模式)是基于XML的DTD的替代品。
W3C的XML规范声明:如果程序在处理XML文档中发现一个有效的错误,那么此程序应该终止。这就是XML软件相对于容易编写的原因。所有的XML文档地都应该是协调一致的。
XML解析器
XML解析器可以读取、更新、创建、操作一个XML文档。
微软的XML解析器是和IE5.0+浏览器捆绑在一起的。一旦你安装了IE5.0,那么就获得了XML解析器。这个浏览器除了被浏览器内部调用外,还可以在脚本中或者程序中调用。这个解析器的特点是支持与程序设计语言无关的编程模型,他支持以下技术:
1. JavaScript, VBScript, Perl, VB, Java, C++ 等等
2. W3C XML 1.0 和 XML DOM
3. DTD 和 XML文档验证
如果浏览器使用JavaScript作为脚本语言,那么利用下面的代码可以创建XML文档对象:
|
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM") |
如果浏览器使用VBScript作为脚本语言,那么利用下面的代码可以创建XML文档对象:
|
set xmlDoc=CreateObject("Microsoft.XMLDOM") |
如果在ASP程序中使用VBScript脚本语言,那么就可以使用下面的代码形式:
|
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM") |
XML高级部分
XML 命名空间
因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生。而这种情况又往往会导致命名冲突。请看下面两个例子。
这个 XML 文档在table元素中携带了水果的信息:
|
<table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> |
这个 XML 文档在table元素中携带了桌子的信息(家具,不能吃的哦):
|
<table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table> |
如果上面两个XML文档片断碰巧在一起使用的话,那么将会出现命名冲突的情况。因为这两个片断都包含了<table>元素,而这两个table元素的定义与所包含的内容又各不相同。
使用命名空间来解决命名空间冲突的问题。
下面的XML文档在table元素中携带了信息
|
<h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> |
下面的XML文档携带了家具table的信息:
|
<f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> |
上面代码的第一行定义了命名空间属性。W3C 命名规范声明命名空间本身就是一个统一资源标示符,Uniform Resource Identifier (URI)。
XML CDATA
在XML文档中的所有文本都会被解析器解析。只有在CDATA部件之内的文本会被解析器忽略。如果文本包含了很多的"<"字符和"&"字符——就象程序代码一样,那么最好把他们都放到CDATA部件中。
一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1
}
else
{
return 0
}
}
]]>
</script> |
转义字符
如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该象下面那样书写代码:
|
<message>if salary < 1000 then</message> |
为了避免出现这种情况,必须将字符"<" 转换成实体,象下面这样:
|
<message>if salary < 1000 then</message> |
下面是五个在XML文档中预定义好的实体:
|
< |
< |
小于号 |
|
> |
> |
大于号 |
|
& |
& |
和 |
|
' |
' |
单引号 |
|
" |
" |
双引号 |
实体必须以符号"&"开头,以符号";"结尾。
注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。
XML编码
XML文档可以包含外文字符比如中文或者法语。为了让你的解析器能够明白这些字符,你必须在XML文档中统一的字符编码标准。
中文使用:encoding="gb2312"或者encoding="gbk"
HTML表格XML数据
通过数据岛,可以把XML文档引入到HTML页面中。
|
<xml src="cd_catalog.xml" id="xmldso" async="false"> </xml> |
使用上面示例代码,可以把cd_catalog.xml文件载入一个叫"xmldso"的数据岛中。属性async="false"的作用是在HTML处理器开始处理XML数据以前,必须确保XML文档中的所有数据都被载入到内存中。
为了使你的XML数据能在HTML页面中显示出来,必须把的数据岛绑定到一个HTML元素上。
把XML数据绑定到table元素,需要在table属性添加一个资源属性,并且在span元素中添加字段属性:
|
<table datasrc="#xmldso" width="100%" border="1"> <thead> <th>Title</th> <th>Artist</th> <th>Year</th> </thead> <tr align="left"> <td><span datafld="TITLE"></span></td> <td><span datafld="ARTIST"></span></td> <td><span datafld="YEAR"></span></td> </tr> </table> |
XML行为
行为(behavior)是一个CSS属性选择器。他指向一个包含了特殊代码并且能够改变HTML页面元素的XML文件(htc)。行为(Behavior)并不是W3C标准,他只是Microsoft的技术。
行为属性可以指向一个分离的XML文件,这个XML文件包含了能够改变XML或者HTML页面的元素或显示样式的脚本代码。
看下面这个HTML文件。在<style>元素中定义了<h1>元素的行为:
|
<html> <head> <style> h1 { behavior: url(behave.htc) } </style> </head> <body> <h1>Move your Mouse over me</h1> </body> </html> |
行为代码存储在一个XML文档(behave.htc)中,如下所示:
|
<component> <attach for="element" event="onmouseover" handler="hig_lite" /> <attach for="element" event="onmouseout" handler="low_lite" /> <script type="text/javascript"> function hig_lite() { element.style.color=255 } function low_lite() { element.style.color=0 } </script> </component> |
这个行为文件包含JavaScript脚本。 这个脚本由<component>元素组成,组成的元素也包含了脚本事件操作者
XML技术
- XHTML - 可扩展HTML(Extensible HTML)
XHTML 使用XML重新定义了HTML 4.01的语法。XHTML 1.0是HTML的下一个版本。更多的请参考我们的XHTML 指南。
- CSS - 层叠样式表单(Cascading Style Sheets)
CSS 样式单可以为XML文档添加显示信息。更多信息请阅读我们的CSS 指南。
- XSL - 可扩展样式单语言(Extensible Style Sheet Language)
XSL由三部分组成: XML文档转换(XML Document Transformation ,又叫XSLT),模式匹配语法( a pattern matching syntax ,又叫XPath), 格式话对象( a formatting object interpretation,XSL FO)。
- XSLT - XML 转换语言(XML Transformation)
XSLT 是一种比CSS强大很多的语言。它可以将XML文档转换成其他格式的文档。。更多知识请阅读 XSL 指南。
- XPath - XML匹配模式(XML Pattern Matching)
XPath是一种用于标识XML文档各个部分的语言。这是一种为了XSLT 和 XPointer而设计出来的语言。
- XLink - XML链接语言(XML Linking Language)
链接语言(The XML Linking Language ,XLink), 允许在不同的XML资源之间建立链接关系。
- XPointer - XML指针语言(XML Pointer Language)
XML指针语言(The XML Pointer Language ,XPointer), 标识XML文档的内部结构,例如元素、属性、内容等。
- DTD - 文档类型定义 (Document Type Definition)
DTD主要用于定义编写XML文档所使用的元素。更多知识请参考 DTD 指南。
- Namespaces - 命名空间
XML命名空间提供了一种可以把元素、属性、名字和URL地址引用相互关联的方法。
- XSD - XML模式(XML Schema)
模式可以和DTD相互替代,并且功能更强大。模式使用XML格式编写,支持命名空间和数据类型。更多请参考 Schema 指南。
- XDR - 数据简化(XML Data Reduced)
XDR是XML模式(XML Schema)的简化版本。IE5.0+浏览器支持XDR。
- DOM - 文档对象模型(Document Object Model)
DOM定义了XML文档的接口、属性和方法。 更多请参考 DOM 指南。
- XQL - XMl查询语言(XML Query Language)
XQL为存放XML文档中的数据提供一种便捷的查询语言。
- SAX - XML的简单API(Simple API for XML)
浙公网安备 33010602011771号