xsltを使用してxmlをフィルタリングするには、次のコードを使用します。java xml大きなxslファイルでxslt変換の問題
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ファイルのため正常に動作しますが、エラースロー「トランス例外を:トランスレットクラスをロードできませんでした」大きいもののためを。
このコードで何が問題になっていますか?誰かがお勧めしますか?
始めに、catch(TransformerException te){System.out.println( "Transformer exception:" + te.getMessage());} 'を' catch(Exception e){e.printStackTrace();に置き換えてください。 }}を実行し、完全なスタックトレースをチェックしてポストします。メモリーに問題がある場合は、JREのメモリーを増やしてください。また、「より大きい」とは、メガバイトまたはギガバイト単位の意味と、変換を実行するために使用できるメモリを共有することです。 XSLTは、大容量ファイルを処理する完全な入力XMLのメモリ内ツリー表現で動作するため、十分なメモリが必要です。 –