[代码生成] 使用Java与XSLT的10条技巧

本文详细介绍了使用Java配合XSLT进行代码生成的10个实用技巧,涵盖了从XML数据转换到XHTML、XSL样式表的运用、以及如何在Java程序中有效地调用和整合XSLT过程。
摘要由CSDN通过智能技术生成
使用Java与XSLT的10条技巧
作者:Eric M. Burke
翻译:家居猫
文章来源:http://www.javaidea.net/list.jsp?topic=30

    在我的新书《Java and XSLT》中介绍了Java与XSLT的技术组合。这篇文章从书中选出了我认为非常重要的10条技巧。但实际上这有限的10条只是粗略的描述了什么是可能的。其中大多数都集中在Java与XSLT的组合上,而不是在XSLT(可扩展样式表转换)技术规范。而更详细的信息,在文章结尾处指出了一些有价值的资源。
    基本的XSL转换是非常简单的:一个或多个包含着指令的XSLT样式表,这些指令定义了如何把XML数据转换成其他格式。XSLT处理器完成实际的工作;Sun微系统的Java API for XML Processing (JAXP)为不同种类的处理器提供了一套标准的Java接口。这里有一个用JAXP的API执行XSL转换的简单例子:
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
public class Transform {
  /**
   * Performs an XSLT transformation, sending the results
   * to System.out.
   */
  public static void main(String[] args) throws Exception {
    if (args.length != 2) {
      System.err.println("Usage: java Transform [xmlfile] [xsltfile]");
      System.exit(1);
    }
    File xmlFile = new File(args[0]);
    File xsltFile = new File(args[1]);     // JAXP reads data using the Source interface
    Source xmlSource = new StreamSource(xmlFile);
    Source xsltSource = new StreamSource(xsltFile);
    // the factory pattern supports different XSLT processors
    TransformerFactory transFact = TransformerFactory.newInstance();
    Transformer trans = transFact.newTransformer(xsltSource);
    trans.transform(xmlSource, new StreamResult(System.out));
  }
}
    你可以点击这里下载一个很小的ZIP文件,这个文件包含了这个例子以及相应的XSLT样式表和XML数据文件。其中的README文件解释了怎样编译和运行这个例子。
    这个这个例子是利用StreamSource从文件中读取数据,JAXP还能从SAX解释器或DOM树来读取XML数据。下面依次介绍我推荐的10条技巧:

1、 尽可能使用缓存。
    执行XSLT转换是很耗费CPU和内存的,所以在任何时候进行可能的优化都是很有意义的。使用由XSLT驱动的Web应用,提高它的实时运行性能表现的最好方法之一就是使用各种类型的缓存技术。
    图一举例说明了一个典型的使用XSL对数据库进行转换的Web应用。


图一、典型的XSL转换

    与动态生成的XML不同,XSLT样式表是静态存储在文件中的。由于这些文件很少被改动,就可以用JAXP的javax.xml.transform.Templates接口把它们解析好了进内存里缓存起来。下面这个程序片断解释了这个过程是怎样完成的:
Source xsltSource = new StreamSource(xsltFile);
TransformerFactory transFact = TransformerFactory.newInstance();
Templates cachedXSLT = transFact.newTemplates(xsltSource);
Transformer trans = cachedXSLT.newTransformer();
    当XSLT样式表通过Templates接口缓存进了内存中,现在它就可以被重复用于很多不同的转换里。最重要的好处是,这样就避免了重复把XSLT解析进内存。它也给了XSLT处理器一个机会来优化转换指令,就象编译器优化软件那样。
    有人可能会想是否可以把XML数据也缓存进内存中。对于那些高度动态和个体化的应用,XML数据是随着每一个客户请求而动态生成的并随时都在变化。对于这种应用,缓存是不实际的。对于很多其它类型的应用,XML数据可能改变的不是很频繁。当数据改变不是很频繁时,相对于缓存XML数据,将转换后的结果缓存可能更有意义。这是一种最快的可行性解决方案,推荐在任何可行的情况下使用。

2、部署前做测试。

    在开发Web应用项目选择XML和XSLT的关键在于可以清楚的把数据、程序逻辑和表达分开。Java代码与后台数据源交互并生成XML数据,XSLT样式表把XML数据转换为XHTML(或WML,或其它),然后浏览器显示结果。
    这种结构的一个独特的,然而时常被忽略的好处是它支
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值