我们知道 xml+XSLT就可以直接输出到支持XML的浏览器上如IE 以上但是我们还要考虑到有不少浏览器不直接支持XML在这种情况下我们需要在服务器上进行转换成html输出到浏览器这种临时过渡办法恐怕要在一段时间内一直要使用 使用jsp 加上tablib标识库我们可以完成这种转换
着名open source项目组jakartaapacheorg推出的系列标识库中就有这个功能的tanglib:
按照jakarta配置方法有点繁琐需要修改或定义Webxml本人经过摸索使用下列相当简单的办法就可以使Jsp能成功运行XSL这个标识库了
xsl标识库有三个关键包:
xercesjar 可以在中得到
xalanjar 可以在中得到
xsljar 从得到
将这三个包放置到Tomcat的common/lib目录下或者直接放入Classpath环境中
在JSP中调用标识库
原来Jakarta推荐方法是
<%@taglib uri="%>
这就需要在/WEBINF/webxml下定义一下指向如
<taglib>
<tagliburi></tagliburi>
<tagliblocation>/WEBINF/xsltld</tagliblocation>
</taglib>
这种做法虽然很标准但是如果你的容器一直使用tomcat就完全不必了
我们的做法是
<%@taglib uri="xsljar" prefix="xsl" %>
我们以Jakarta的XSL taglib附带的Applyjsp为例正好了解一下Jsp XML XSLT三者之间的关系
Applyjsp
<%@taglib uri="xsljar" prefix="xsl" %>
<html>
<head>
<title>Employee List</title>
</head>
<body bgcolor="white">
<p>下面展示了Jsp的四种组合XML XSLT的方法
<p>下面使用apply方法将已经存在的employeesxml和employeeListxsl结合在一起
<xsl:apply xml="/xml/employeesxml" xsl="/xml/employeeListxsl"/>
<hr>
<p>下面是使用已经存在employeeListxsl 然后在Jsp中自己直接写入XML数据
<xsl:apply xsl="/xml/employeeListxsl">
<?xml version="" encoding="ISO"?>
<employees>
<employee id="">
<firstname>John</firstname>
<lastname>Doe</lastname>
<telephone></telephone>
</employee>
<employee id="">
<firstname>Jane</firstname>
<lastname>Smith</lastname>
<telephone></telephone>
</employee>
<employee id="">
<firstname>George</firstname>
<lastname>Taylor</lastname>
<telephone></telephone>
</employee>
</employees>
</xsl:apply>
<hr>
<p>下面使使用include调用的办法这样一个XSLT样式可以适应不同的XML文件
<xsl:apply xsl="/xml/employeeListxsl">
<xsl:include page="/xml/employeesxml"/>
</xsl:apply>
<hr>
<p>下面是使用import方法在pagescope(类似scope="page")中导入XML文件</p>
<xsl:import id="data" page="/xml/employeesxml"/>
<xsl:apply nameXml="data" xsl="/xml/employeeListxsl"/>
</body>
在上面程序中展示了四种Jsp组合XML XSLT的方法基本可以满足我们的需要注意上面的XML文件路径是"/xml/"这是相对Tomcat容器的绝对路径
我们简单看一下employeeListxsl和employeesxml内容
employeeListxsl类似html中的CSS主要是对XML中数据显示方式进行定义
<?xml version=""?>
<xsl:stylesheet version="" xmlns:xsl=">
<xsl:template match="employees">
<table border="" width="%">
<tr>
<th>ID</th>
<th>Employee Name</th>
<th>Phone Number</th>
</tr>
<xsl:foreach select="employee">
<tr>
<td>
<xsl:valueof select="@id"/>
</td>
<td>
<xsl:valueof select="lastname"/>
<xsl:valueof select="firstname"/>
</td>
<td>
<xsl:valueof select="telephone"/>
</td>
</tr>
</xsl:foreach>
</table>
</xsl:template>
</xsl:stylesheet>
employeesxml
<?xml version="" encoding="ISO"?>
<employees>
<employee id="">
<firstname>John</firstname>
<lastname>Doe</lastname>
<telephone></telephone>
</employee>
<employee id="">
<firstname>Jane</firstname>
<lastname>Smith</lastname>
<telephone></telephone>
</employee>
<employee id="">
<firstname>George</firstname>
<lastname>Taylor</lastname>
<telephone></telephone>
</employee>
</employees>
如果我们在employeesxml顶部加入
<?xml:stylesheet type="text/xsl" href="catalogxsl"?>
用支持XML的IE 以上浏览器调用其显示页面就和Applyjsp显示页面是一样的