我使用以下代码使用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类”用于较大的文件。
这段代码有什么问题?有人可以建议吗?
答案 0 :(得分:0)
当然,一种解决方案是尝试不同的处理器。您可以通过将javax.xml.transform.TransformerFactory设置为org.apache.xalan.processor.TransformerFactoryImpl来切换到Xalan解释器版本,或者通过将它设置为net.sf.saxon.TransformerFactoryImpl来切换到Saxon。
坦率地说,如果您在Java世界中,现在很难理解为什么有人会想要将自己限制在XSLT 1.0处理器中,尤其是那些没有任何活动的处理器发展多年。切换到Saxon。