Ich verwende den folgenden Code, um ein xml mit xslt zu filtern.java xml xslt Umwandlungsproblem mit großen xsl-Dateien
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());
}
}
}
der Code funktioniert für kleinere XML-Dateien in Ordnung, aber führt den Fehler „Transformator Ausnahme: Kann die Translet Klasse laden“ für größere.
Was ist falsch an diesem Code? Kann jemand bitte vorschlagen?
Zum ersten Mal ersetzen Sie 'catch (TransformerException te) {System.out.println (" Transformer-Ausnahme: "+ te.getMessage());}' mit 'catch (Exception e) {e.printStackTrace(); } 'und check und poste den kompletten Stack-Trace. Wenn es sich um ein Speicherproblem handelt, geben Sie der JRE mehr Speicher. Und Sie möchten vielleicht teilen, was "größer" in Megabyte oder Gigabyte bedeutet und welchen Speicher Sie zur Ausführung der Transformation zur Verfügung haben. Da XSLT auf einer In-Memory-Tree-Repräsentation der vollständigen XML-Input-Verarbeitung arbeitet, benötigt große Dateien genügend Speicher. –