我们知道 XML+XSLT就可以直接输出到支持XML的浏览器上,如IE 5.0以上,但是,我们还要考虑到有不少浏览器不直接支持XML,在这种情况下,我们需要在服务器上进行转换成HTML输出到浏览器,这种临时过渡办法恐怕要在一段时间内一直要使用. 使用JSP 加上TABLIB标识库,我们可以完成这种转换。
著名OPEN SOURCE项目组JAKARTA.APACHE.ORG推出的系列标识库中,就有这个功能的TANGLIB:HTTP://JAKARTA.APACHE.ORG/TAGLIBS/DOC/XSL-DOC/INTRO.HTML
按照JAKARTA配置方法,有点繁琐,需要修改或定义WEB.XML,本人经过摸索,使用下列相当简单的办法,就可以使JSP能成功运行XSL这个标识库了。
XSL标识库有三个关键包: XERCES.JAR 可以在HTTP://XML.APACHE.ORG/中得到 XALAN.JAR 可以在HTTP://XML.APACHE.ORG/中得到 XSL.JAR 从HTTP://JAKARTA.APACHE.ORG/TAGLIBS/DOC/XSL-DOC/INTRO.HTML得到
1.将这三个包放置到TOMCAT的COMMON/LIB目录下,或者直接放入CLASSPATH环境中。
2.在JSP中调用标识库:
原来JAKARTA推荐方法是:
<%@TAGLIB URI="HTTP://JAKARTA.APACHE.ORG/TAGLIBS/XSL-1.0" PREFIX="XSL" %>
这就需要在/WEB-INF/WEB.XML下定义一下HTTP://JAKARTA.APACHE.ORG/TAGLIBS/XSL-1.0指向。如:
<TAGLIB> <TAGLIB-URI>HTTP://JAKARTA.APACHE.ORG/TAGLIBS/XSL-1.0</TAGLIB-URI> <TAGLIB-LOCATION>/WEB-INF/XSL.TLD</TAGLIB-LOCATION> </TAGLIB>
这种做法虽然很标准,但是,如果你的容器一直使用TOMCAT,就完全不必了。
我们的做法是:
<%@TAGLIB URI="XSL.JAR" PREFIX="XSL" %>
我们以JAKARTA的XSL TAGLIB附带的APPLY.JSP为例,正好了解一下JSP XML XSLT三者之间的关系:
APPLY.JSP
<%@TAGLIB URI="XSL.JAR" PREFIX="XSL" %> <HTML> <HEAD> <TITLE>EMPLOYEE LIST</TITLE> </HEAD> <BODY BGCOLOR="WHITE">
<P>下面展示了JSP的四种组合XML XSLT的方法: <P>下面使用APPLY方法,将已经存在的EMPLOYEES.XML和EMPLOYEELIST.XSL结合在一起
<XSL:APPLY XML="/XML/EMPLOYEES.XML" XSL="/XML/EMPLOYEELIST.XSL"/> <HR>
<P>下面是使用已经存在EMPLOYEELIST.XSL 然后在JSP中自己直接写入XML数据.
<XSL:APPLY XSL="/XML/EMPLOYEELIST.XSL"> <XML VERSION="1.0" ENCODING="ISO-8859-1"> <EMPLOYEES> <EMPLOYEE ID="123"> <FIRST-NAME>JOHN</FIRST-NAME> <LAST-NAME>DOE</LAST-NAME> <TELEPHONE>800-555-1212</TELEPHONE> </EMPLOYEE> <EMPLOYEE ID="456"> <FIRST-NAME>JANE</FIRST-NAME> <LAST-NAME>SMITH</LAST-NAME> <TELEPHONE>888-555-1212</TELEPHONE> </EMPLOYEE> <EMPLOYEE ID="789"> <FIRST-NAME>GEORGE</FIRST-NAME> <LAST-NAME>TAYLOR</LAST-NAME> <TELEPHONE>555-555-1212</TELEPHONE> </EMPLOYEE> </EMPLOYEES> </XSL:APPLY> <HR>
<P>下面使使用INCLUDE调用的办法,这样一个XSLT样式可以适应不同的XML文件。
<XSL:APPLY XSL="/XML/EMPLOYEELIST.XSL"> <XSL:INCLUDE PAGE="/XML/EMPLOYEES.XML"/> </XSL:APPLY> <HR>
<P>下面是使用IMPORT方法,在PAGE-SCOPE(类似SCOPE="PAGE")中导入XML文件</P>
<XSL:IMPORT ID="DATA" PAGE="/XML/EMPLOYEES.XML"/> <XSL:APPLY NAMEXML="DATA" XSL="/XML/EMPLOYEELIST.XSL"/>
</BODY>
在上面程序中,展示了四种JSP组合XML XSLT的方法,基本可以满足我们的需要。注意上面的XML文件路径是"/XML/",这是相对TOMCAT容器的绝对路径。
我们简单看一下EMPLOYEELIST.XSL和EMPLOYEES.XML内容:
EMPLOYEELIST.XSL类似HTML中的CSS,主要是对XML中数据显示方式进行定义:
<XML VERSION="1.0"> <XSL:STYLESHEET VERSION="1.0" XMLNS:XSL="HTTP://WWW.W3.ORG/1999/XSL/TRANSFORM"> <XSL:TEMPLATE MATCH="EMPLOYEES"> <TABLE BORDER="1" WIDTH="100%"> <TR> <TH>ID</TH> <TH>EMPLOYEE NAME</TH> <TH>PHONE NUMBER</TH> </TR> <XSL:FOR-EACH SELECT="EMPLOYEE"> <TR> <TD> <XSL:VALUE-OF SELECT="@ID"/> </TD> <TD> <XSL:VALUE-OF SELECT="LAST-NAME"/>, <XSL:VALUE-OF SELECT="FIRST-NAME"/> </TD> <TD> <XSL:VALUE-OF SELECT="TELEPHONE"/> </TD> </TR> </XSL:FOR-EACH> </TABLE> </XSL:TEMPLATE>
</XSL:STYLESHEET>
EMPLOYEES.XML
<XML VERSION="1.0" ENCODING="ISO-8859-1">
<EMPLOYEES> <EMPLOYEE ID="123"> <FIRST-NAME>JOHN</FIRST-NAME> <LAST-NAME>DOE</LAST-NAME> <TELEPHONE>800-555-1212</TELEPHONE> </EMPLOYEE>
<EMPLOYEE ID="456"> <FIRST-NAME>JANE</FIRST-NAME> <LAST-NAME>SMITH</LAST-NAME> <TELEPHONE>888-555-1212</TELEPHONE> </EMPLOYEE>
<EMPLOYEE ID="789"> <FIRST-NAME>GEORGE</FIRST-NAME> <LAST-NAME>TAYLOR</LAST-NAME> <TELEPHONE>555-555-1212</TELEPHONE> </EMPLOYEE> </EMPLOYEES>
如果我们在EMPLOYEES.XML顶部加入:
<XML:STYLESHEET TYPE="TEXT/XSL" HREF="CATALOG.XSL">
用支持XML的IE 5.0以上浏览器调用,其显示页面就和APPLY.JSP显示页面是一样的。 |