在xmlspy中使用java的xslt转换.
我喜欢在xmlspy中来写xml, xsl, xsd, 并且用xmlspy自带的xslt工具或者利用msxml来查看xslt转换结果. 在实际使用中发现尽管xmlspy的xslt有些小bug, 但是它能提供具体的错误位置, 排错很方便. Java下
有xalan和saxon都可以做xslt转换.
saxon除了支持标准的xslt1.0, 还部分支持xslt2, 其中多文档输出特别有用. 下载地址:saxon.sf.net. 解压缩后在xmlspy中配置如下:java -jar C:/java/lib/saxon7-3-1/saxon7.jar -o %2 %1 %3
xalan已经内置在jdk1.4中, 但是没有提供命令行调用方式, 这里简单包装如下:
import javax.xml.transform.*;
/** * command line xslt using jdk1.4 * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author not attributable * @version 1.0 */
public class XSLT { private static final String USAGE = "xslt 1.0: command line xslt for jdk1.4/n/n" +"command line usage: java -jar xslt.jar xmlfile xslfile outfile/n" +"xmlspy exteral xslt setup: java -jar c://java//lib//xslt.jar %1 %3 %2/n";
public XSLT() { }
public static void transform(Source xml, Source xsl, javax.xml.transform.Result out) throws Exception{ TransformerFactory.newInstance().newTransformer(xsl).transform(xml,out); }
public static void main(String[] args) { if (args.length<2){ System.out.println(USAGE); return; } Source xml = new javax.xml.transform.stream.StreamSource(args[0]); Source xsl = new javax.xml.transform.stream.StreamSource(args[1]); Result out = null; if (args.length>2) out = new javax.xml.transform.stream.StreamResult(args[2]); else out = new javax.xml.transform.stream.StreamResult(System.out); try{ transform(xml, xsl, out); }catch(Exception e){ System.out.println("error: "+e.getMessage()); } }
}
建议用jbuilder的jar builder wizard打包成xslt.jar. xmlspy中配置如下:java -jar c:/java/lib/xslt.jar %1 %3 %2
在运行速度上, 感觉差别不大. 还是满快的 :)