欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

XSL简明教程

程序员文章站 2022-06-28 17:05:37
一. xsl入门1.xsl---xml的样式表 html网页使用预先确定的标识(tags),这就是说所有的标...

一. 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的转换
  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--在客户端的实现
  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文件中。