摘要:XML是Extensible Markup Language(可扩展标记语言)的简称。XML是一种以简单文本格式存储数据的方式,这意味着它可以被任何计算机读取。XML是在Internet上传书数据的绝佳格式。通过使用XML,数据可存储于HTML之外。
XML是Extensible Markup Language(可扩展标记语言)的简称。XML是一种以简单文本格式存储数据的方式,这意味着它可以被任何计算机读取。XML是在Internet上传书数据的绝佳格式。通过使用XML,数据可存储于HTML之外。
XML最大的优势在于:XML是跨平台的、用于传输信息且独立于软件和硬件的工具。
下面举一个很简单的例子来说明它对于传输信息的重要性。
Jani写给Tove的便签,存储为XML:
1 note>
2 to>Toveto>
3 from>Janifrom>
4 heading>Reminderheading>
5 body>Dont forget me this weekend!body>
6 note>
一、XML文档
XML中的完整数据集就是XML文档。XML文档可以是计算机上的物理文件,获知内存中的字符串。但是其本身必须是完整的,必须遵循一定的规则。XML文档由许多不同的部分组成。其中最重要的部分是XML元素,它包括文档的实际数据。
1、XML元素
XML元素包含一个开标记(放在尖括号中的元素名称,比如)、元素中的数据和闭标记(与开标记想通,但是在左括号后有一个斜线:)。例如定义一个存储书名的元素:
1 book>Tristram Shandybook>
注意:元素是区分大小写的!例如:和是不同的!
元素也可以包含其他元素,因此可以修改此元素,添加两个子元素,使之包括作者和标题:
1 book>
2 title>Tristram Shandytitle>
3 author>Lawrence Sterneauthor>
4 book>
5
但是元素不允许重叠!例如:
book>
title>Tristram Shandy
author>Lawrence Sterne
title>author>
book>
这样是错误的!
2、XML属性
与在元素体内存储数据一样,也可以在属性内存储数据,属性添加到元素的开标记内。属性的形式为:
Name = “value”
其中属性值必须包含在单引号或者双引号内。例如:
book title=”Tristram Shandy”>book>
或者:
book title = ‘Tristram Shandy’>book>
3、XML声明
XML文档的各个组成部分称为节点----因此元素、元素内的文本和属性都是XML文档的节点。但是只有一种类型的节点存在几乎所有的XML文档中,这就是XML声明,如果包括了它,它就必须是文档的第一个节点。
XML声明的格式类似于元素,但是在尖括号内有问号。它一贯的名称是xml,并总是有version属性。最简单的XML声明形式为:
xml version = “1.0”?>
4、XML文档的结构
XML数据是分层组织的,有点类似于Windows Explorer中的文件夹和文件。每一个文档必须有一个根元素,该元素是所有其他元素的父元素。XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。在这个根元素下包含了其他所有的元素和文本数据。如果在文档的顶级中有多个元素,改文档就是不合法的XML文档。但是可以在顶级包括其他XML节点,所有元素均可拥有子元素。所有的XML元素都必需有闭标签。下面的XML文档是合法的:
1 xml version=’1.0’?>
2 books>
3 book>Mody Dickbook>
4 book>Tristram Shandybook>
5 book>Ulyssesbook>
6 books>
7
但是下面的文档就不合法:
xml version=’1.0’?>
book>Mody Dickbook>
book>Tristram Shandybook>
book>Ulyssesbook>
XML文档不需要任何预定义的结构。这是传统关系数据库和XML的主要区别之一。信息存储在XML中时不需要这个初始设置,所以XML是存储小块数据的非常方便的方式。
5、XML命名空间
先来看看下面的例子。一个XML文档中包含了一个表格的信息:
1 table>
2 tr>
3 td>Applestd>
4 td>Bananastd>
5 tr>
6 table>
7
而另一个文档中包含了一个桌子的信息(一件家具):
1 table>
2 name>African Coffee Tablename>
3 width>80width>
4 length>120length>
5 table>
6
假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的
元素,就会发生命名冲突。怎么解决呢?有两种方法,一种是使用前缀,一种是使用命名空间。
1)使用前缀
带有表格信息的文档:
1 h:table>
2 h:tr>
3 h:td>Applesh:td>
4 h:td>Bananash:td>
5 h:tr>
6 h:table>
7
带有桌子信息的文档:
f:table>
f:name>African Coffee Tablef:name>
f:width>80f:width>
f:length>120f:length>
f:table>
现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的
元素 ( 和 )。通过使用前缀,我们创建了两种不同类型的 元素。
2)使用命名空间
带有表格信息的文档:
h:table xmlns:h="http://www.w3.org/TR/html4/">
h:tr>
h:td>Applesh:td>
h:td>Bananash:td>
h:tr>
h:table>
带有桌子信息的文档:
f:table xmlns:f="http://www.w3cschool.cn/furniture">
f:name>African Coffee Tablef:name>
f:width>80f:width>
f:length>120f:length>
f:table>
与使用前缀不同,我们为
标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。与使用前缀相比,感觉使用命名空间不过是在标签上多加了个xmlns的属性而已,既然效果一样,为什么还要多次一举呢(多加一个标签)?至于为什么要使用命名空间的好处,我的理解还不是很深刻,请大家多多赐教。
二、XML文档的验证
现在一般使用两种验证方法:XMLDTD和XML Schema。
1、XML DTD
文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。
带有 DTD 的 XML 文档实例(请在 IE5 以及更高的版本打开,并选择查看源代码):
1 xml version="1.0"?>
2 DOCTYPE note [
4 ELEMENT to (#PCDATA)>
5 ELEMENT from (#PCDATA)>
6 ELEMENT heading (#PCDATA)>
7 ELEMENT body (#PCDATA)>
8 ]>
9 note>
10 to>Georgeto>
11 from>Johnfrom>
12 heading>Reminderheading>
13 body>Dont forget the meeting!body>
14 note>
15
具体内容参考http://www.w3cschool.cn上的标准。
2、XML Schema
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
这部分的内容太多了,改天专门整理一个文档。具体内容参考http://www.w3cschool.cn上的标准。
三、使用javascript解析XML
创建的book.xml如下:
1 xml version="1.0" encoding="utf-8" ?>
2 books>
3 book title="平凡的世界">
4 author>路遥author>
5 book>
6 book title="水浒传">
7 author>施耐庵、罗贯中author>
8 book>
9 book title="西游记">
10 author>吴承恩author>
11 book>
12 books>
13
客户端代码如下:
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
head>
title>使用javascript解析XMLtitle>
script type="text/javascript" language="javascript">
function CreateXMLParser(xmlDocPath)//创建XML文档解析器
{
var parser;
try
{
//使用IE浏览器
parser=new ActiveXObject("Microsoft.XMLDOM");//创建一个空的微软XML文档对象
}
catch(e)
{
try
{
//使用Firefox,Mozilla,Opera浏览器
parser=document.implementation.createDocument("","",null);
}
catch(e)
{
alert("您的浏览器不支持对XML文档的解析,请您升级浏览器");
return null;
}
}
parser.async="false";//关闭异步加载,确保在文档完全加载之前解析器不会继续脚本的执行
parser.load(xmlDocPath);//加载名为“book,xml”的XML文档
return parser;
}
function getMsgFromXMLDoc(xmlDocPath)//从xml文档中读取信息
{
var xmlParser = CreateXMLParser(xmlDocPath);
if(xmlParser==null)
return;
//开始从xml解析器中读取信息
var msg="";
var books=xmlParser.getElementsByTagName("book");//得到xml文档中所有的元素
for(var i=0;ibooks.length;i++)//遍历所有的元素
{
var book=books[i];//得到一个book元素
msg = msg+"书名:";
msg = msg+book.attributes[0].value;//读取book元素的属性
msg = msg+" 作者:";
msg = msg+book.childNodes[0].text;//读取book元素的子元素中的数据
msg = msg+"
";
}
alert(msg);
}
script>
head>
body onload="getMsgFromXMLDoc(book.xml)">
body>
html>
从上面的代码得知,使用javascript解析xml需要如下步骤:
1、创建xml解析器。IE浏览器使用ActiveXObjec。其他浏览器使用document.implementation.createDocument()方法。
2、关闭异步加载。
3、加载XML文档。
4、读取XML文档的信息。
本文参考了http://www.w3cschool.cn上大量的标准和教程,大家可以在这个网站得到更多关于XML和其他Web技术的标准和教程。