Java XML文件比较
我尝试使用XMLUnit比较两个XML文件。我在eclipse中尝试了以下代码,我将要比较的xml文件放在本地目录中Java XML文件比较,xml,java,xmlunit,Xml,Java,Xmlunit,我尝试使用XMLUnit比较两个XML文件。我在eclipse中尝试了以下代码,我将要比较的xml文件放在本地目录中 import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.util.List; import org.custommonkey.xmlunit.DetailedDiff; import org.custommonkey.xmlunit.Di
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.Difference;
import org.xml.sax.SAXException;
public class ComparisonTest {
public static void main(String[] args) {
URL url1 = ComparisonTest.class.getResource("D:/reference.xml");
URL url2 = ComparisonTest.class.getResource("D:/comparison.xml");
FileReader fr1 = null;
FileReader fr2 = null;
try {
fr1 = new FileReader(url1.getPath());
fr2 = new FileReader(url2.getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
Diff diff = new Diff(fr1, fr2);
System.out.println("Similar? " + diff.similar());
System.out.println("Identical? " + diff.identical());
DetailedDiff detDiff = new DetailedDiff(diff);
List differences = detDiff.getAllDifferences();
for (Object object : differences) {
Difference difference = (Difference)object;
System.out.println("***********************");
System.out.println(difference);
System.out.println("***********************");
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我得到了一个错误
Exception in thread "main" java.lang.NullPointerException
at com.org.comparison.ComparisonTest.main(ComparisonTest.java:21)
我不知道为什么?我不确定您是否可以将“D:/reference.xml”作为资源传递。只需将路径传递给
文件读取器的构造函数
:
FileReader fr1 = null;
FileReader fr2 = null;
try {
fr1 = new FileReader("D:/reference.xml");
fr2 = new FileReader("D:/comparison.xml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
我很确定getResource
为您提供空值
URL url1 = ComparisonTest.class.getResource("D:/reference.xml");
URL url2 = ComparisonTest.class.getResource("D:/comparison.xml");
System.out.println(url1 + " " + url2); // I suppose output is "null null"
由于getResource()方法的原因,您会出现此错误。它不会将引用对象返回到xml文件。您可以直接将文件名传递给FileReader构造函数,也可以创建文件类对象。我已经导入了你的代码块,你可以复制并运行它。它将100%起作用:):)
}确保
url1
和url2
不是空值。@NikitaBeloglazov-是否考虑ComparisonTest.class.getResource(“D:/reference.xml”);?否。如果找不到资源。检查@nikitabloglazov-我需要将xml文件放在哪里?我给的是对的,嗯?
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.Difference;
import org.xml.sax.SAXException;
public class ComparisonTest {
public static void main(String[] args) {
File f1 = new File("D:/reference.xml");
File f2= new File("D:/comparison.xml");
FileReader fr1 = null;
FileReader fr2 = null;
try {
fr1 = new FileReader(f1);
fr2 = new FileReader(f2);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
Diff diff = new Diff(fr1, fr2);
System.out.println("Similar? " + diff.similar());
System.out.println("Identical? " + diff.identical());
DetailedDiff detDiff = new DetailedDiff(diff);
List differences = detDiff.getAllDifferences();
for (Object object : differences) {
Difference difference = (Difference)object;
System.out.println("***********************");
System.out.println(difference);
System.out.println("***********************");
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}