2つのXMLファイルを比較しようとしていますが、これはXMLUnitを使用して類似しています(テストのためにランダム化ツールで要素の順序を変更したばかりです)。XMLユニットの制限
要素の最大数または要素と子要素の最大複雑度には制限がありますか?
私のXMLファイルが長すぎず、要素がかなり単純である限り、すべて正常に動作します。
しかし、あまりにも複雑な要素(最大5つのサブ要素)があると、同様の結果が返され、存在しないdiffが返されます。
私の最初の印象は、単純な要素があまりにも多くなると同じ結果になることです。しかし、それは今も確かです。
誰かがXMLユニットのデフォルト制限について何か知っていますか?私の経験のために調整する可能性はありますか?
おそらく、私は複雑な要素内の特定の要素を無視しなければならないと言及する必要があります。それが重要かどうかは分かりません。あまり複雑でない要素ではありません。
package newXMLComperator;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.Difference;
import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
public class Arbeiter {
private File quelle, vergleich;
public Arbeiter(File quelle, File vergleich) {
this.quelle=quelle;
this.vergleich=vergleich;
}
public void vergleichen()
{
long tbevore = System.currentTimeMillis();
XMLUnit.setIgnoreAttributeOrder(Boolean.TRUE);
XMLUnit.setIgnoreWhitespace(Boolean.TRUE);
String f1 = lesen(quelle);
String f2 = lesen(vergleich);
try {
Diff diff = new Diff(f1, f2);
diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
diff.overrideDifferenceListener(new IgnoreNamedElementsDifferenceListener(findSVSW_ID(quelle)));
DetailedDiff dd = new DetailedDiff(diff);
boolean result = dd.similar();
StringBuilder sb = new StringBuilder();
if (result ==true)
{
sb.append("Die Dateien sind inhaltsgleich");
}
else
{
sb.append("Die Dateien unterscheiden sich \n \n");
List<Difference>list = dd.getAllDifferences();
for (Difference aktuell : list)
{
if (!aktuell.isRecoverable())
{
sb.append("Der Ausdruck "+aktuell.getControlNodeDetail().getValue()+" wurde gesucht \n");
sb.append("Der Ausdruck "+aktuell.getTestNodeDetail().getValue()+" wurde gefunden \n");
sb.append("Xpath: "+aktuell.getTestNodeDetail().getXpathLocation()+"\n \n");
}
}
}
long tafter = System.currentTimeMillis();
String dauer = Long.toString((tafter-tbevore)/1000);
sb.append("Die Bearbeitung dauerte " +dauer+" Sekunden \n");
speichern(sb.toString());
}
catch (Exception e)
{
e.printStackTrace();
}
}
private String lesen(File datei)
{
String result ="";
try {
BufferedReader leser = new BufferedReader(new FileReader(datei));
StringBuilder sb = new StringBuilder();
String gelesen = leser.readLine();
while (gelesen!=null)
{
sb.append(gelesen);
gelesen=leser.readLine();
}
result=sb.toString();
leser.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
private List<String> findSVSW_ID(File datei)
{
List<String>liste = new ArrayList<String>();
liste.add("AUFTRAGSCHLUESSEL");
liste.add("LIEFERUNGSCHLUESSEL");
try {
BufferedReader leser = new BufferedReader(new FileReader(datei));
String gelesen = leser.readLine();
while (gelesen!=null)
{
if (gelesen.contains("SVSW_ID"))
{
String [] teile = gelesen.split(">");
String temp = teile[0].replaceAll("<", "");
if (!liste.contains(temp))
{
String t2=temp.replaceAll(" ", "");
liste.add(t2);
}
}
gelesen=leser.readLine();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return liste;
}
private void speichern(String text)
{
File datei = new File(quelle.getParent()+"/ausgabe.txt");
try {
BufferedWriter schreiber = new BufferedWriter(new FileWriter(datei));
schreiber.write(text);
schreiber.flush();
schreiber.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ヘルプ
はXMLUnitの制限のポストに関連している[XMLUnit - 比較上のXMLファイルのインデントの影響](のhttp://のstackoverflow。com/questions/5248517/xmlunit-xml-file-indentation-impacts-on-comparison)、[子ノードが順序付けしているためXMLunit比較の失敗](http://stackoverflow.com/questions/28683449/xmlunit-comparison-failure-because -child-nodes-order)を使用します。あなたのXMLエントリにこの機能がありましたか? –