XMLUnit 1.5 を使用している私の Java プログラムでは、2 つの XML ファイルを (名前空間を使用して) 比較します。しかし、XPathes には名前空間が含まれていません。XMLUnit にそれを指示するにはどうすればよいですか? それは可能ですか?
これが私のコードです:
control = new FileReader(file1);
test = new FileReader(file2);
list = new ArrayList<Unterschied>();
Diff diff;
diff = new Diff(control, test);
diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
if (diff.similar())
{
MessageDialog.openInformation(null, "Info", "Similar");
}
else if (!diff.similar())
{
DetailedDiff detDiff = new DetailedDiff(diff);
detDiff.overrieElementQualifier(new ElementNameAndAttributeQualifier());
@SuppressWarnings("unchecked")
List<Object> differences = detDiff.getAllDifferences();
for (Object object : differences)
{
Difference difference = (Difference) object;
if (!difference.isRecoverable() && !difference.getDescription().contains("number of child nodes"))
{
controlXPath = difference.getControlNodeDetail().getXpathLocation(); // without Namespaces!
controlValue = difference.getControlNodeDetail().getValue();
testXPath = difference.getTestNodeDetail().getXpathLocation(); // without Namespaces!
testValue = difference.getTestNodeDetail().getValue();
list.add(new Unterschied(controlOrt, controlWert, testOrt, testWert));
}
}
プログラムの後半で、このノードの正しい位置を取得するためにこれらの XPathes を評価しました。これらの位置で、ユーザーが違いを確認できるように、エディターで適切なテキストを選択します。
評価するための私のコード:
public void evaluateXPath(String xp, Node node) {
XPath newXPath = new XPathFactoryImpl().newXPath();
XPathExpression xpExp = newXPath.compile(xpath);
NodeList nodeList = (NodeList) xpExp.evaluate(node, XPathConstants.NODESET);
int length = nodeList.getLength();
for (int i=0; i < length; i++) {
IDOMNode iDOMnode = (IDOMNode) nodeList.item(i);
textEditor.selectAndReveal(iDOMnode.getStartOffset(), iDOMnode.getEndOffset()-iDOMnode.getStartOffset());
}
}
あなたの助けに感謝し、私の悪い英語を申し訳ありません! ;)