XmlUnit を使用して 2 つの XML ファイルから違いを取得するアプリケーションがあります。しかし問題は、XmlUnit が JDOM を使用していることです。私のxmlファイルは最大1GBです!
これらの xml を JDOM ドキュメントに格納するには、RAM が多すぎます。
SlimJDOMFactory を使用しようとしましたが、それでも RAM の使用量が多すぎます!!
実際には、XML ファイル内を前後に移動する必要があります。JDOM がなければ、簡単な方法は見つかりませんでした。
誰でも助けることができますか?
JDOM ドキュメントの作成方法に関するコードのサンプルを次に示します。
private org.jdom2.Document refDocJdom2;
private org.jdom2.Document resDocJdom2;
SAXBuilder sxb = new SAXBuilder();
sxb.setJDOMFactory(new SlimJDOMFactory());
popmsg("Validating reference file...");
try {
refDocJdom2 = sxb.build(referenceXML_Path);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error while parsing Reference : "+referenceXML_Path+" file.\nCheck XML file validity.");
return;
}
popmsg("Reference file validated");
popmsg("Validating result file....");
try {
resDocJdom2 = sxb.build(resultXML_Path);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error while parsing result "+resultXML_Path+" file.\nCheck XML file validity.");
return;
}
popmsg("Result file validated");
popmsg("Validation Done.");
getDifferencies(referenceXML_Path, resultXML_Path);
d2 = new Date();
}
public void getDifferencies(String fileRef, String fileRes) throws SAXException, IOException {
popmsg("Documents : VALID XML format");
popmsg("Shearching for differencies....");
Reader refReader;
refReader = new FileReader(fileRef);
Reader resReader = new FileReader(fileRes);
Diff aDifference = new Diff(refReader, resReader);
if(refReader != null){
refReader.close();
}
refReader = null;
if(resReader != null){
resReader.close();
}
resReader = null;
//TODO
// XMLUnit.setIgnoreWhitespace(true);
myDetailledDiff = new DetailedDiff(aDifference);
myDetailledDiff.overrideDifferenceListener(new IgnoreNamedElementsDifferenceListener());
myDetailledDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
allDiffs = myDetailledDiff.getAllDifferences();
myDetailledDiff = null;
popmsg("Got all differencies...\nGoing to Sort them now...");
popmsg("Diff SIZE : "+allDiffs.size());
myDiffsList = new ArrayList<MyDifference>(allDiffs.size());
if(allDiffs.size() > 0){
Difference aDiff;
for (int i = 0; i < allDiffs.size(); i++){
aDiff = (Difference) allDiffs.get(i);
myDiffsList.add(new MyDifference(aDiff, refDocJdom2, resDocJdom2));
if(myDiffsList.size() == LIMIT)
return ;
if (i%25 == 0 && i!= 0){
popmsg("**************************************************\t"+i+"\n");
}
}
allDiffs.clear();
allDiffs = null;
}else{
popmsg("NO DIFERENCIES");
}
}