通过XSLT转换XML
Hello,every body.又与大家见面了,哈哈。今天我与大家分享一下XSLT,XSL,XML,XPath.因为项目中有些功能用到了XSLT、XML等技术。所以今天好好研究了一下这几个方面的技术,宋桑说过嘛,要学会总结归纳。所以,要把自己学到东西写出来。一来温习一遍,二来与大家交流学习一下。
在研究这些技术的Demo中,发现有用唱片名字来做例子的。所以,无意中发现了一张唱片,发现了一个歌手。感觉不错,与大家分享一下。Bob Dylan----<Empire Burlesque>,很带感的一张专辑。在工作之余,可以听听放松一下自己的brain.Ok,书归正传。Let us Go
What is XML
XML:可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。理解这么枯燥乏味的定义真糟心的,大家不用去理解这句话。存在即合理,世上的任何事、任何人、任何技术,都有她存在的道理。在接触新东西时,一定要有这样的意识。学习技术,也是一样。去学习一个新技术时要先思考,她出现的历史原因、她为什么会出现、她出现解决了什么。我们什么时候会用到她呢?举个最常见的例子,AJAX,大家一定都接触过。当我们通过AJAX向服务器发送请求,有时是需要服务器返回内容的。服务器返回的内容,是以什么样的数据格式返回的呢?Json、XML,是最常用的两种数据格式。(Note:Json较XML更轻便灵活,但是本文旨在介绍XSTL转换XML。所以,大家如果对Json感兴趣的话,可以自行Bing.)
文字是很苍白无力的,那么上图吧:
这就是XML的一个例子,大家可以观察一下这张图片。很类似我们项目中的web.config文件的格式,一个开始标签必定对应一个结束标签。这也是XML的一个特点,结构很规范,方便阅读。
但是有一点大家要注意,XML严格区分大小写。当服务器想返回给我数据时,就可以采用XML的格式来传输。例如,我们需要从服务器返回数据库中一张存放书籍信息的表。那么服务器就可以讲数据编写成XML来返回客户端。例如:
<BookStore>
<Book>
<Category>小说</Category>
<Name>The God Father</Name>
<Authory>Mario Puzo</Authory>
<Price>$120</Price>
</Book>
<Book>
<Category>小说</Category>
<Name>The God Father</Name>
<Authory>Mario Puzo</Authory>
<Price>$120</Price>
</Book>
<Book>
<Category>小说</Category>
<Name>The God Father</Name>
<Authory>Mario Puzo</Authory>
<Price>$120</Price>
</Book>
<Book>
<Category>小说</Category>
<Name>The God Father</Name>
<Authory>Mario Puzo</Authory>
<Price>$120</Price>
</Book>
</BookStore>对于,XML大家只要知道她是个格式很规范、区分大小写的数据传输格式就OK了。她的用途就是来传输数据。
What is XSL
XSL:是可扩展样式表语言的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言。这个定义怎么去理解呢?首先来看看她为什么出现?她出现解决了什么原因?对于Web Developer来说,HTML与CSS的关系,应该都比较清楚。HTML相当于一张女孩子的脸,而CSS相当于女孩子用的化妆品。女孩子通过化妆品,可以把自己的脸变得beautiful。那么XSL就是XML的化妆品。我们从服务器获得的数据,是以XML格式呈现的。但是我们往往需要向用户展示的是HTML页面。所以,就需要转换XML,转换成我们想要的东西。可以是HTML、XHTML、XML。那么用什么转换呢?
XSL与XSLT是什么关系呢?XSL不仅仅是样式表语言,XSL包括三个部分:
一、XSLT----转换XML的语言。
二、XPath---一种用于在文档中导航的语言。
三、XSL-FO----一种用于格式化XML文档的语言。(Note:本文主要讲解通过XSLT转换XML,大家如果对XSL-FO感兴趣,可以自行BING)
在这里我给大家分析一下他们三者之间的关系,XSLT、XPath、XLT-FO她们三个是XSL的组成部分。XSL是通过XSLT语言对XML进行转换。XSLT是通过XPath语言来进行对XML元素的查找,如果把XML比作数据库,那么XPath就是SQL语句。XSL-FO,是用来格式化XML文档的。
What is XSLT
XSLT:在计算机科学中,XSLT是 扩展样式表转换语言 的外语缩写,这是一种对XML(标准通用标记语言的子集)文档进行转化的语言,XSLT中的T代表英语中的“转换”(Transformation)。它是XSL(eXtensible Stylesheet Language)规范的一部分。我们先来看一下XSLT可以为我们解决什么问题?
一、XSLT可以将XML类型的文件转换我们想要的任意文本类型文件。例如:HTML、XHTML、XML等。
二、她可以为我们修改XML文件。可以通过XSLT来向原XML添加元素、删除元素、添加属性、删除属性、可以控制他们的顺序结构等。
通常,我们把XSLT转换XML的过程称为,XSLT将XML的源树转换为XML的结果树。
What is XPath
XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。关于XPath的定义,我我们可以这样来理解她。所以的Web Developer对JQuery框架的命名原因都不会陌生,JQuery,顾名思义,J代表JavaScript脚本,Query的英文意思是查询。整个意思就是一套对HTML DOM元素查询的框架。所以JQuery的最重要的功能之一就是查询功能。而XPath跟JQuery的查询功能一样,只不过前者是对XML文档查询,而后者是对HTML Dom文档查询。这样来理解就OK了。XSLT在对XML进行转换时,就是通过XPath语言来进行查询的。
好了,XML、XSL 、XSLT、XPath的概念大家都清楚了。接下来通过例子,来学习XSLT转换XML。
首先,我们来创建一个XML文档,文档内容点击下面的链接:
http://www.w3school.com.cn/xsl/cdcatalog.xml
再创建一个XSL文档,文档内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
好了,这两个文件就可以将我们的XML文档转换成我们想要的XHTML。这么转换呢?很简单,我们把XML文档当成HTML,把XSL文件当成CSS样式文件。把XSL文件拖入XML文件就可以了。让我们看看完成后的XML文档:
效果地址:http://www.w3school.com.cn/xsl/cdcatalog_with_xsl.xml
怎么样,是不是将结构化的XML转换为了我们熟悉的XHTML了。很简单的吧,如果你觉得这就是XSL的全部功能,那么你就大错特错了。XSL的功能是很强大的,跟着我继续学下去吧。
这是上面我们定义的XSL文档,我给大家分析一下这个XSL文档的结构,因为XSL样式表本身也是个XML文档,所以第一行的XML文档声明是必不可少的。第二行的含义是对XSL样式表的声明,“xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’”这句话,引用XSLT的命名空间。只有引用了XSLT的命名空间,我们才能访问XSLT的元素、属性以及特性。这就像,当我们在C#中通过ADO.NET来连接数据库时,需要引用System.Data.SqlClient.SqlConnection命名空间。
<xsl:template>元素
<xsl:template match="/"> 元素定义一个模板。match是用来关联XML节点和模板的。match 属性也可用来为整个文档定义模板,match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。
<xsl:value-of>元素
<xsl:value-of>元素,用来提取某个选定节点的值,并把值添加到转换的流中输出。
<xsl:for-each>元素
<xsl;for-each>元素,可以用来循环指定节点集中的每个XML元素。
这就是XSLT转换XML格式的常用元素,还有一个高级元素,例如排序、选择、等等,大家感兴趣的可以自行BING。这里我就不细讲了,好了,就到这里吧。Good-bye!