Java sdk要求XSLT的transformer实现javax.xml.transform.TransformerFactory抽象类中的抽象方法。该工厂类成为具体的Transformer实例创建的入口。目前主流的实现在www.jdom.org/docs/apidocs/org/jdom2/transform/XSLTransformer. html的网页上可以得到以下的XSLTprocessers:
Saxon 6.x: com.icl.saxon.TransformerFactoryImpl
Saxon 7.x: net.sf.saxon.TransformerFactoryImpl
Xalan: org.apache.xalan.processor.TransformerFactoryImpl
jd.xslt: jd.xml.xslt.trax.TransformerFactoryImpl
Oracle: oracle.xml.jaxp.JXSAXTransformerFactory
此外在打开j2se sdk 的javax.xml.transform.TransformerFactory.java 文件后,看finder函数,会发现j2se调用的是com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.
在上面说的那个api网页上介绍了使用这些入口的方法。可以通过以下步骤实现:
1, 调用System.setProperty(“javax.xml.transform.TransformerFactory”,”classname”)
2, 通过设置命令行参数:-Djavax.xml.transform.TransformerFactory=classname.
3, 进入到JRE路径下修改lib/jaxp.properties文件,添加下面一行文字
javax.xml.parsers.DocumentBuilderFacotry=classname
4, 在META-INF/services/目录下命名一个javax.xml.transform.TransformerFactory的文件。编辑这个文件,配置所需的Transformer包
5, 最后你也可以什么都不配,用jdk自带的Transformer。从Sun的JDK1.4开始,jdk内置的Transformer就是Xalan。JDK1.4的是Xalan2.2d10。
2 Transformer的使用
1, 创建xslFile的StreamSource。StreamSource类将一个xsl文件/数据对象封装成一个向Transformer提供转换规则的数据源。通过使用这个数据源Tansformer可以实例化一个转换处理的入口。
2, 构建输入和输入的对象。输入和输出的对象都是StreamResult类的实例。
3, 调用Transformer的transform方法,实现数据转换。
示例代码如下:
TransformerFactoryfactory = TransformerFactory.newInstance();
StreamResultinput = new StreamResult(xmlReader);
StreamResultresult = new StreamResult(outWriter);
factory.newTransformer(newStreamSource(xslFile)).transform(input, result);
TransformerFactory
Transformer