Xslt笔记
最近处理一些任务需要用到xslt,所以在这方面初步的学习了下,感觉不错,但不敢独享,故将一些收集到的笔记整理了下,给大家分享。
Ps:另外,怕一次写多了,大家没耐心看下去,所以这次先整理一些最基础的东西,想入门的可以花点耐心看下。
简介
可扩展样式表语言转换(Extensible Stylesheet Language Transformations,XSLT)允许您描述将输入 XML 文档转换为输出树(例如 XML、HTML 或文本)。它可用于复杂的 XML 文档表示,或者用于转换不同的 XML 格式。
我们系统大量的应用了xml+xsl=html的方式来画一些静态的表单。因为xml本身是无任何意义的,它只是一堆数据而已,所以除了我们开发人员能看懂外给用户是毫无意义的。Xslt就可以将我们取得的数据很好的解释出来,并且呈现给用户。你可以这样理解,XSL和XML其实都是HTML的一部分,只不过把数据部分抽取出来放在XML中,而样式与逻辑部分放在XSL中。这样做的好处是,当客户要求修改表单的格式和样式时,我们只需要修改xslt即可,更重要的是xslt是一种解释性的语言,我们不用编译程序就可以轻轻松松的即时的得到修改后的效果。
用法
Xslt做为一种语言当然有它的语法,这里就不一一列出了,大家可以通过很多渠道得来,我们下面主要举几个简单的例子,看看怎样实现xml+xslt=html。
现在有一个如下的一份xml(姑且叫它a.xml):
<?xml version="1.0" encoding="utf-8" ?>
<catalog>
<cd>
<title ifShow="1">Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>1000.90</price>
<year>1985</year>
</cd>
<cd>
<title ifShow="2">Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9999.90</price>
<year>1988</year>
</cd>
<cd>
<title ifShow="3">Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
</catalog>
这样的数据呈现给用户是毫无意义的,看下面的xslt文件(文件名为:a.xslt)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <!-- 这是xslt解释的入口,它会逐行的进行解释 -->
<html> <!-- 这里直接解释成一个html表单,我们也可以解释成其它的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/@ifShow" /> <!-- 这里是访问其属性值-->
</td>
<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>
最后我们在定义一个这样的页面就可以得到一个画好的表格:
<html>
<body>
<script type="text/javascript">
// 加载XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("a.xml")
// 加载XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("a.xsl")
//解释
document.write(xml.transformNode(xsl))
</script>
</body>
</html>
结果如下:
总结
上面只是举了一个最简单的例子。个人觉得要想学好这个东西,其实没有捷径,只有不断的实践。下面是我在做的过程中发现的几个需要注意的地方:
1、 xml和xslt的空格处理;
2、 xslt的特殊字符的处理,特别是“<”和“>”;
3、 xslt中的判断时数据类型的取舍,特别是对那些数字,但又可以做字符用的数据;
4、 注意xslt的程式结构,当其表单较为复杂和大时,学会将各个可以独立的单元独立出来,便于以后的维护和阅读;
5、 其他问题,需要大家在开发的过程中一起发现和总结。