XSL简明教程
程序员文章站
2022-03-21 23:33:33
一. 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文件中。