使用Xalan进行XSLT程序设计--第一个使用Xalan的例子

本文介绍如何使用Xalan进行XSLT程序设计,包括创建TransformerFactory实例、Templates实例及Transformer实例,并通过示例展示如何将XML文件转换为HTML格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面我们用一个例子来演示以下使用Xalan进行XSLT程序设计的最基本过程,这是一个最基本的JSP程序,简单到不可能在简单的地步了。我想通过这个程序来让大家了解Xalan进行XSLT是多么的简单。实话实说,尽管猛一看大家什么都不会,实际上进行XSLT程序设计并不难。在这个程序里面,所有的工作实际上可以仅仅用四步来完成。

  1. 使用javax.xml.transform.TransformerFactory的newInstance方法创建一个javax.xml.transform.TransformerFactory的实例。
  2. 使用javax.xml.transform.TransformerFactory中的newTemplates方法创建一个javax.xml.transform.Templates的实例。javax.xml.transform.Templates是一个界面,其实现与界面的提供者无关,可以通过设置来更改,在Xalan和sun提供的jaxp1.1中是由Xalan提供的。
  3. 使用javax.xml.transform.Templates的newTransformer方法创建一个javax.xml.transform.Transformer的实例。javax.xml.transform.Transformer同样是一个可以更改其实现的实例。(第二步和第三步在部分情况下可以合并,使用javax.xml.transform.TransformerFactory中的newTransformer方法来完成,具体我们会在后面讨论。)
  4. 使用Transformer中的transform方法进行转换,这里要用到javax.xml.transform.Source类处理输入和javax.xml.transform.Result类处理输出。

 

 <%@ page contentType="text/html; charset=GB2312" import="java.io.File" %> <% //使用TransformFactory界面的newInstance方法创建一个新的实例。 //TransformFactory的缺省实现是Xalan提供的org.apache.xalan.processor.TransformerFactoryImpl类 javax.xml.transform.TransformerFactory tFactory = javax.xml.transform.TransformerFactory.newInstance(); //使用TransformFactory界面的newTemplates方法创建一个Templates界面的实现对象。 //Templates的缺省实现是Xalan提供的org.apache.xalan.templates.StylesheetRoot javax.xml.transform.Templates oTemplates = oFactory.newTemplates( //使用一个StreamSource对象来读取一个xsl文档 new javax.xml.transform.stream.StreamSource(request.getRealPath("/")+"xslt"+File.separator+"atomtest.xsl") ); //使用Templates界面的newTransformer方法创建一个新的Transformer。 //Transformer的缺省实现实Xalan提供的org.apache.xalan.transformer.TransformerImpl javax.xml.transform.Transformer transformer = oTemplates.newTransformer(); //使用Transformer进行转换。 transformer.transform ( //创建一个StreamSource对象来读取atom.xml new javax.xml.transform.stream.StreamSource(request.getRealPath("/")+"xslt"+File.separator+"atom.xml"), //使用out作为输出writer创建一个StreamResult输出转换结果。 new javax.xml.transform.stream.StreamResult( out )); %> 

 

这个演示所使用的xslt文件和xml文件来自《XML Bible》。XML文件的内容为H与He的化学信息,而XSL文档的内容则是把这个XML文件转换为一个html的文档。这个JSP程序通过一个基本的Xalan的转换过程输出HTML文档。下面是这个JSP程序的运行结果在Mozilla0.8中显示的结果,后面是Tomcat启动时的输出信息,熟悉的朋友一定看出我去掉了jaxp.jar和parser.jar这两个文件。

XML源文件XSL源文件以及JSP的源程序请点击各自的连接。

这个程序在Pwindows 98,Tomcat 3.21,mozilla0.8的环境下运行通过。

这个程序仅仅用来演示,在真正使用的时候是同这个程序中使用的编程方法不同的。在单线程的程序中,我们可以使用TransformerFactory中的newTransformer方法直接获取一个Transformer,这种方法比我们上面使用的方法节省一步。在多线程的情况下,我们可以和上面一样创建一个Templates对象,然后再每个线程中从Templates中获取Transformer。这样可以节省读取xslt文档的时间,大大加快程序运行的速度。下面的jsp程序就是为多线程进行了优化的程序。

  <%@ page contentType="text/html; charset=GB2312" import="java.io.File" %> <%! javax.xml.transform.Templates oTemplates = null; javax.xml.transform.TransformerFactory oFactory = javax.xml.transform.TransformerFactory.newInstance(); javax.xml.transform.stream.StreamSource oInput = null; %> <% if( null == oTemplates ) { oTemplates = oFactory.newTemplates( new javax.xml.transform.stream.StreamSource("FILE:///D:/mytest/xslt/atomtest.xsl") ); } if( null == oInput ) { oInput = new javax.xml.transform.stream.StreamSource(request.getRealPath("/")+"xslt"+File.separator+"atom.xml"); } javax.xml.transform.Transformer transformer = oTemplates.newTransformer(); transformer.transform ( oInput, new javax.xml.transform.stream.StreamResult( out ) ); %> 

这个程序在PWindows98,tomcat2.3.1,jdk1.2/1.3环境下调试通过。源程序可以从此下载。运行结果如下图。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值