掌握XML系列(1)--XML基础

来源:岁月联盟 编辑:zhuzhu 时间:2009-01-12
  前言: 技术在变,好的东西依然不变!XML就是这样的一样东西.提起XML,大家都很熟悉,到处都可以看见和听到关于它的信息.虽然XML已经有几十年的历史了,但是 真正掌握它的人究竟有多少?之前XML随着ajax又火了一把.大家可以回头看看我们之前出现的的技术AJax,WPF,Silverlight...以及ADO.NET,Web Service...到处都是XML的身影,   难道XML仅仅就只是一门标记语言?仅仅只是要求"有开始标记,和结束标记,不区分大小写"就行了吗?是否知道,其实HTML就是XML的一种?很少有书籍能够全面的讲解XML的,要么是把它和ASP.NET一起讲,要么就讲XML怎么样和别的技术用,我也不是什么专家,我想写专门讲XML的文章.和大家分享我的学习结果.

  在这个系列中会比较全面的谈谈XML相关的知识:比如,XPath,XSLT,XSD...而且整个系列都穿插着应用,希望大家关注!

  本章内容如下:

  XML的定义和用途

  XML中有那些元素和属性,以及如何使用他们生成格式良好的XML文档

  使用文档类型定义(DTD)验证XML的有效性

  1.XML的概念

  XML明确定义了结构化,描述和交换数据的方法.XML与HTML的不同在于,XML不是对数据进行格式化处理的.例如在HTML中<body><p>等标签,他们很多只是表示一种显示的结构,这些标签不是我们想要的数据,也不能保存到数据库中,而且HTML中的标签很有限,而且这些标签的意义很固定,如<p>就是分段,当你看见,<P>23.4</P>,你不知道这个数字的意义,是表示温度还是价格.然而,XML确实针对数据的,不行格式标签,并且可以实现数据的自我描述,标签定义很灵活,如,<title>CEO</title>,<name>xiaoyang</name>,我们一看这些标签就知道它的意思,而且可以转换为相应的数据库字段(以后谈).总的来说,XML是数据格式的,有意义,灵活的标记语言.

  2.XML元素

  XML文档的核心就是包含在文档中的元素.使用过HTML的人,,都清楚元素这个概念.XML元素与HTML元素的概念相似,.就元素的命名而言,XML的规则就比HTML的要灵活,但是XML不允许出现HTML元素那样松散的结构(在HTML中,不是所有的标记都一定要开始标记和结束标记对应).所有的XML元素的开始和结束的标记,以及大小写也要对应.

  举例来讲:

  Code

1<html>
2 <Title><head>Person</head></title>
3 <body>
4 <h2>Name</h2>
5 <hr>
6 xiaoyang
7</html>

  上面的代码段作为html没有什么问题,但是作为xml文档就有问题:1.1:打开的<body>标记没有关闭标记(</body>),<hr>也是这样.1.2:<Tile>元素的开始标记和结束标记</title>大小写形式不同.要使得上面的片段成为有效的XML文档,就要关闭<body><hr>,以及使得<title>的大小写一致.如下:

  Code

<html>
 <title><head>Person</head></title>
 <body>
 <h2>Name</h2>
 <hr/>
 xiaoyang
 </body>
</html>

  总结:从上面的<body>元素可以看出,要关闭标记,只要使得他们既有相同的元素名称,并且在前面加一个"/"就行了.在<body>元素的开始和结束标记之间的所有元素成为子节点.注意<hr>元素稍有不同.如果谈论的元素不包含数据,就称之为"空元素",<hr/>就是空元素.注意加"/"的位置!

  3.XML属性

  与HTML相似,XML元素也可以附加属性,这些属性通常用于添加有关元素的信息或者包含在元素中数据.在上面的HTML例子中,可以在<body>元素中添加bgcolor属性,如下;

  Code

<html>
 <title><head>Person</head></title>
 <body bgcolor=red>
 <h2>Name</h2>
 <hr/>
 xiaoyang
 </body>
</html>

  这个属性置顶了页面的背景色,不过该语法会使得上面的文档不再是合法的XML文档,因为XML要求:属性值比如包含再引号中(单引号,或者双引号).虽有为了使得上面的合法,就要改,如下:

  Code

<html>
 <title><head>Person</head></title>
 <body bgcolor="red">
 <h2>Name</h2>
 <hr/>
 xiaoyang
 </body>
</html>

  确保属性值"red"在引号内.

  4.XML解析器

  Web浏览器要解释并且显示使用HTML元素标记的文档,需要处理器或者解析器,XML也是这样的,该解析器以及内需使用数据的应用程序读取XML,所有的XML解析器都要检查XML文档的格式是否良好,格式良好就是遵守XML规范,如之前提到的开始标记和结束标记对应,大小写区分等等.

  解析器有两种:验证型解析器和非验证型解析器.非验证型的只要检查文档的格式是否良好就可以了,而验证型的还能根据另一个定义XML文档内容和结构的文档,来检查XML文档是否有效.如DTD,XSD.

  一般情况下,我们的浏览器中就已经内嵌了XML的非验证型的解析器.

  5.构造XML

  举例,先看下面的一个HTML文档.

  Code

<html>
 <title><head>Person</head></title>
 <body >
  <p>xiaoyang</p><br>wuhan
  <p>Jefferyzhao</p><br>shanghai
  <p>dfyingchen</p><br>shanghai
 </body>
</html>

  上面的HTML文档包含格式标记和数据.我们讲上面的文档改为xml文档:

  Code

<?xml version="1.0"?>
<persons>
<person name="xiaoyang">wuhan</person>
<person name="jefferyzhao">shanghai</person>
<person name="dflyingchen">shanghai</person>
</persons>

  注意:其实如何设计XML文档没有什么公式可以套用的,理解这一点很重要.因为XML只是数据的表现形式而已,你还可以把上面的数据信息改为另外的XML形式,如下:

  Code

<?xml version="1.0"?>
<friends>
<friend name="xiaoyang" address="wuhan" />
<friend name="jefferyzhao" address="shanghai" />
<friend name="dflyingchen" address="shanghai" />
</friends>

  形式可以很多,但是要记住:上面显示的只是数据,没有任何的布局信息.

  大家可以用任何的文本编辑器来创建一个XML文档,并且用浏览器打开,就会发现:浏览器可以验证XML的格式是否良好.

  6.XML文档的各个组成部分

  XML文档最多可以有4部分组成(其中3个部分是可选的),如果他们出现在文档中,比如按照下面顺序排列:

  序言(可选的)

  DTD(可选的)

  文档根

  结尾(可选)

  6.1序言

  XML文档的序言部分一般包含出现在文档或者文档根元素开始标记之前的信息.它包含应用与整个文档的信息,如:字符编码,样式表引用.另外,还包含XML声

  明,注释,处理指令.但是所有这些都是可选的.

  XML声明是这些组成部分中最重要的,虽然它是可选的,但是很多的系统和解析器都要求文档有XML声明.因为声明中包含了:

  XML语法的version,"1.0"版本

  文档内容编码encoding (可选)

  文档是否是standalone(默认值为no),表示文档是否依赖外部文件

  XML声明最基本的格式如下:

  Code

<?xml version="1.0"?>

  还可以这样,如

  Code

<?xml version="1.0" encoding="gb2312" ?>

  注意:'<?xml " 要紧挨一起,后面的"?>"也是一样.

  6.2文档类型定义DTD

  文档类型定义是描述XML的内容的,它定义了你创建的XML文档中应该包含哪些元素,哪些属性.然后文档类型定义结合解析器一起验证你的XML文档.我们

  能以后会讲解的,这里知提一下.

  6.3文档根

  文档根是必须的,它是XML文档中序言和DTD部分后面的第一个元素,它可以包含属性,子元素,注释等.前面的例子中的<persons>就是一个文档根的例子.

  6.4结尾

  结尾与序言相似,因为结尾部分就是处理指令的所在位置,一般用于执行清除工作,但是很少使用.大家可以不管.

  因为:XML理论很多,一下子写多了大家可能不爱看,今天就到这里.