2016-08-01 12 views
0

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ファイルのため正常に動作しますが、エラースロー「トランス例外を:トランスレットクラスをロードできませんでした」大きいもののためを。

このコードで何が問題になっていますか?誰かがお勧めしますか?

+0

始めに、catch(TransformerException te){System.out.println( "Transformer exception:" + te.getMessage());} 'を' catch(Exception e){e.printStackTrace();に置き換えてください。 }}を実行し、完全なスタックトレースをチェックしてポストします。メモリーに問題がある場合は、JREのメモリーを増やしてください。また、「より大きい」とは、メガバイトまたはギガバイト単位の意味と、変換を実行するために使用できるメモリを共有することです。 XSLTは、大容量ファイルを処理する完全な入力XMLのメモリ内ツリー表現で動作するため、十分なメモリが必要です。 –

答えて

0

もちろん、1つの解決策は別のプロセッサを試すことです。 Xalanインタプリタのバージョンに切り替えるには、javax.xml.transform.TransformerFactoryをorg.apache.xalan.processor.TransformerFactoryImplに設定するか、Saxonにnet.sf.saxon.TransformerFactoryImplに設定します。

あなたがJavaの世界にいるのであれば、何人かが最近XSLT 1.0プロセッサに制限したい理由、特に何年も積極的な開発をしていない人がいるのは難しいです。 Saxonに切り替えてください。

+0

マイケルに感謝...これは私が修正しようとしていたレガシーコードでした:) – BRATVADDI

関連する問題