XSL 简 明 教 程(上)

XSL 简 明 教 程(上)
一 .XSL 入 门 章 节 导 航 

 

  1.XSL---XML 的样式表 

HTML 网页使用预先确定的标识 (tags) ,这就是说所有的标记都有明确的含义,例如 <p> 是另起一行 <h1> 是标题字体。所有的浏览器都知道如何解析和显示 HTML 网页。 
然而, XML 没有固定的标识 , 我们可以建立我们自己需要的标识,所以浏览 器不能 自动解析它们,例如 <table> 可以理解为表格,也可以理解为桌子。由于 XML 的可扩展性,使我们没有一个标准的办法来显示 XML 文档。 
为了控制 XML 文档的显示,我们有必要建立一种机制, CSS 就是其中的一种,但是 XSL( eXtensible Stylesheet Language) 是显示 XML 文档的首选样式语言,它比 CSS 更适合于 XML 。 

2.XSL --- 不仅仅是一种样式表 

XSL 由两部分组成: 

一是转化 XML 文档;二是格式化 XML 文档。 

如果你不理解这个意思,可以这样想: XSL 是一种可以将 XML 转化成 HTML 的语言,一种可以过滤和选择 XML 数据的语言,一种能够格式化 XML 数据的语言。 ( 比如用红色显示负数。 ) 

3.XSL --- 它能做什么? 

XSL 可以被用来定义 XML 文档如何显示,可以将 XML 文档转换成能被浏览器识别的 HTML 文件,通常的, XSL 是通过将每一个 XML 元素 " 翻译 " 为 HTML 元素,来实现这种转换的。 

XSL 能够向输出文件里添加新的元素,或则移动元素。 XSL 也能够重新排列或者索引数据,它可以检测并决定哪些元素 被显示 ,显示多少。 

4.XSL 在 IE5 中的显示 

注意: IE5.0 中,并不能完全兼容 W3C 组织发布的最新 XSL 标准。因为 IE5.0 是在 XSL 标准最终确定以前发布的。微软已经承诺在 IE5.5 中修正。 


 

一 .XSL 入 门 

二 .XSL的转换 

三 .XSL--在客户端的实现

四 .XSL --- 在服务器端的实现 


五 . XSL 的索引 

六 . XSL的过滤和查询

七 . XSL 的控制语句
 
二 .XSL的转换  章 节 导 航 
1.将XML转换成HTML 

XSL是如何将XML文档转换成HTML文件的呢?我们来看一个例子,下面是XML文档的一部分: 

<?xml version="1.0" encoding="ISO8859-1" ?> 

<CATALOG> 

<CD> 

<TITLE>Empire Burlesque</TITLE> 

<ARTIST>Bob Dylan</ARTIST> 

<COUNTRY> USA </COUNTRY> 

<COMPANY> Columbia </COMPANY> 

<PRICE>10.90</PRICE> 

<YEAR>1985</YEAR> 

</CD> 

... 

然后我们将下面的 XSL文件作为HTML的模板将XML数据转换为HTML文件: 

<?xml version='1.0'?> 

< xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl"> 

< xsl:template match="/"> 

<html> 

<body> 

<table border="2" bgcolor ="yellow"> 

< tr > 

< th >Title</ th > 

< th >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 > 

在上面的代码中, xsl:for -each元素的作用是定位XML文档中的哪些元素需要按以下模板显示。select属性用来定义源文件中的元素名。指定属性的这种语法又称为XML 
Pattern(模式),类似文件子目录的表示形式。 xsl:value -of元素用来在当前层次中插入子元素的内容模板。 

因为XSL样式表自身也是一个XML文档,因此,XSL文件的开头以一个XML声明开始。 xsl:stylesheet 元素用来声明这是一个样式表文件。< xsl:template 
match="/">语句表示XML的源文档在当前目录下。 

如果为XML文档加上XSL样式表,看下面代码第2行,你的浏览器就可以精确的将XML 文档转换为HTML文件。 

<?xml version="1.0" encoding="ISO8859-1" ?> 

<?xml- stylesheet type="text/ xsl " href =" cd_catalog.xsl "?> 

<CATALOG> 

<CD> 

<TITLE>Empire Burlesque</TITLE> 

<ARTIST>Bob Dylan</ARTIST> 

<COUNTRY> USA </COUNTRY> 

<COMPANY> Columbia </COMPANY> 

<PRICE>10.90</PRICE> 

<YEAR>1985</YEAR> 

</CD> 


 

一 .XSL 入 门 

二 .XSL的转换 

三 .XSL--在客户端的实现

四 .XSL --- 在服务器端的实现 


五 . XSL 的索引 

六 . XSL的过滤和查询

七 . XSL 的控制语句
 
三 . XSL--在客户端的实现   
1.JavaScript解决方案 

在上面的章节中我们已经解释了XSL是如何将XML转换成HTML文件。方法就是在XML文档的头部加入一个XSL样式 表信息 ,然后让浏览 器执行 转换过程。 

这种方法在大部分情况下都做得很好,但是在不支持XML的浏览器中就无法正确显示了。 

一个更好的更全面的解决方案是使用 Javascript 来实现XML到HTML的转换。但是使用JavaScript必须得到以下功能支持: 

a.允许 Javascript 代替浏览器进行细节检测; 

b.根据不同的需要和不同的浏览器使用不同的样式表。 

对于XSL来说这是完全可行的。设计XSL的目标之一就是允许将一种格式转换成另一种格式,支持不同的浏览器,支持不同的用户需求。未来的浏览器的重要任务就是在客户端执行XSL的转换工作。 

2.一个具体的实例 

下面是我们上面提到的一个XML文档( cd_catalog.xml )例子的部分代码: 

<?xml version="1.0" encoding="ISO8859-1" ?> 

<CATALOG> 

<CD> 

<TITLE>Empire Burlesque</TITLE> 

<ARTIST>Bob Dylan</ARTIST> 

<COUNTRY> USA </COUNTRY> 

<COMPANY> Columbia </COMPANY> 

<PRICE>10.90</PRICE> 

<YEAR>1985</YEAR> 

</CD> 

下面是完整的XSL文件( cd_catalog.xsl ): 

<?xml version='1.0'?> 

< xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl"> 

< xsl:template match="/"> 

<html> 

<body> 

<table border="2" bgcolor ="yellow"> 

< tr > 

< th >Title</ th > 

< th >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文件还没有加入XSL样式表,还没有被转换成HTML文件。 

下面是用 JavaSript 来实现最后转换的HTML代码: 

< html > 

<body> 

<script language=" javascript "> 

// Load XML 

var xml = new ActiveXObject (" Microsoft.XMLDOM ") 

xml.async = false 

xml.load (" cd_catalog.xml ") 

// Load the XSL 

var xsl = new ActiveXObject ( " Microsoft.XMLDOM ") 

xsl.async = false 

xsl.load (" cd_catalog.xsl ") 

// Transform 

document.write ( xml.transformNode ( xsl )) 

</script> 

</body> 

</html> 

上面代码中使用了 Javascript ,如果你不知道如何写 JavaScript,您最好专门学习一下。 

第一段代码建立一个Microsoft Parser(XMLDOM)解析的对象,并将XML文档读入内存;第二段代码建立另外一个对象并导入XSL文档;最后一行代码将XML文档用XSL文档转换,并将结果输出到HTML文件中。

 

 


 

 
 
四 : XSL --- 在服务器端的实现   
1.兼容所有的浏览器 

在上面一章我们介绍了可以通过JavaScript调用浏览器的XML parser(解析软件)来转换XML文档。但是这个方案依然有个问题:如果浏览器没有XML 
parser插件怎么办?(注:IE5内自带XML parser) 

为了使我们的XML数据能被所有的浏览 器正确 显示,我们不得不在 服务器端将 XML转换成纯HTML代码,再输出给浏览器。 

这也是使用XSL的另一个好处。在 服务器端将一种 格式转换为另一种格式也是XSL的设计目标之一。 

同样,转换工作也将成为未来服务器段的主要工作。 

2.一个具体实例 

下面是我们上面提到的一个XML文档( cd_catalog.xml )例子的部分代码: 

<?xml version="1.0" encoding="ISO8859-1" ?> 

<CATALOG> 

<CD> 

<TITLE>Empire Burlesque</TITLE> 

<ARTIST>Bob Dylan</ARTIST> 

<COUNTRY> USA </COUNTRY> 

<COMPANY> Columbia </COMPANY> 

<PRICE>10.90</PRICE> 

<YEAR>1985</YEAR> 

</CD> 

下面是完整的 XSL文件( cd_catalog.xsl ): 

<?xml version='1.0'?> 

< xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl"> 

< xsl:template match="/"> 

<html> 

<body> 

<table border="2" bgcolor ="yellow"> 

< tr > 

< th >Title</ th > 

< th >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文件为HTML文件的原代码: 

<% 

'Load the XML 

set xml = Server.CreateObject ( " Microsoft.XMLDOM ") 

xml.async = false 

xml.load ( Server.MapPath (" cd_catalog.xml ")) 

'Load the XSL 

set xsl = Server.CreateObject ( " Microsoft.XMLDOM ") 

xsl.async = false 

xsl.load ( Server.MapPath (" cd_catalog.xsl ")) 

Response.Write ( xml.transformNode ( xsl )) 

%> 

注意:我们这里的例子采用的是 ASP文件,用VBScript编写的。如果您不了解ASP或者VBScript,建议阅读有关书籍。(当然,也可以采用其他的语言编写服务器端程序) 

第一段代码建立一个 Microsoft Parser(XMLDOM)解析的对象,并将XML文档读入内存;第二段代码建立另外一个对象并导入XSL文档;最后一行代码将XML文档用XSL文档转换,并将结果输出到HTML文件中。 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值