使用大xsl文件的java xml xslt转换问题

时间:2016-08-01 06:46:37

标签: java xml xslt

我使用以下代码使用xslt过滤xml。

import java.io.PrintStream;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XMLTransformation {
private static String TASK = null;

public static void main(String[] args) {
    try {
        if (args.length > 0) {
            TASK = args[0];
            System.out.println("TASK being filtered is " + TASK);
        } else {
            System.out.println("TASK NOT supplied..Exiting");
            System.exit(2);
        }
        String TASK_VAR = TASK.replaceAll("\\.", "_");
        String input_file_param = String.valueOf(TASK_VAR) + "_INPUT_FILE";
        String output_file_param = String.valueOf(TASK_VAR) + "_OUTPUT_FILE";
        String xsl_file_param = String.valueOf(TASK_VAR) + "_XSL_FILE";
        StreamSource input = new StreamSource(System.getenv(input_file_param));
        StreamSource xsl = new StreamSource(System.getenv(xsl_file_param));
        StreamResult output = new StreamResult(System.getenv(output_file_param));
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(xsl);
        transformer.setOutputProperty("indent", "yes");
        transformer.transform(input, output);
    }
    catch (TransformerException te) {
        System.out.println("Transformer exception: " + te.getMessage());
    }
}
}

该代码适用于较小的XML文件但引发错误“Transformer异常:无法加载translet类”用于较大的文件。

这段代码有什么问题?有人可以建议吗?

1 个答案:

答案 0 :(得分:0)

当然,一种解决方案是尝试不同的处理器。您可以通过将javax.xml.transform.TransformerFactory设置为org.apache.xalan.processor.TransformerFactoryImpl来切换到Xalan解释器版本,或者通过将它设置为net.sf.saxon.TransformerFactoryImpl来切换到Saxon。

坦率地说,如果您在Java世界中,现在很难理解为什么有人会想要将自己限制在XSLT 1.0处理器中,尤其是那些没有任何活动的处理器发展多年。切换到Saxon。