XMLUnit2を使用して2つのXMLを部分的に比較しようとしています。私はXpathの下で、要素int
だけを比較しようとしました。しかし、私のテストは、boolean
タグもチェックしているので失敗しました。XPATHでXMLUnit2を使用してxmlを比較するにはどうすればよいですか?
このテストに合格するにはどうすればよいですか?
@Test
public void diff_through_xPath(){
String myControlXML = "<struct><boolean>false</boolean><int>3</int></struct>";
String myTestXML = "<struct><boolean>true</boolean><int>3</int></struct>";
ElementSelector childSelector = selectorForElementNamed("int", byXPath("//int", byName));
Diff myDiffSimilar = DiffBuilder.compare(myControlXML).withTest(myTestXML)
.withNodeMatcher(new DefaultNodeMatcher(childSelector, byName))
.checkForSimilar()
.ignoreWhitespace()
.build();
assertFalse("XML similar " + myDiffSimilar.toString(),
myDiffSimilar.hasDifferences());
}
編集:はNodeFilterで 、私は比較から不要なノードを削除しました。しかし、Xpathを与え、XPathによって評価されたノードだけを比較する方法があります。
@Test
public void diff_through_xPath() {
String myControlXML = "<struct><boolean>false</boolean><int>3</int></struct>";
String myTestXML = "<struct><boolean>true</boolean><int>3</int></struct>";
Diff myDiffSimilar = DiffBuilder.compare(myControlXML).withTest(myTestXML)
.withNodeFilter(new Predicate<Node>() {
public boolean test(Node node) {
return !node.getNodeName().equals("boolean"); //ignores all child nodes from of 'a'.
}
})
//.checkForSimilar()
.ignoreWhitespace()
.build();
assertFalse("XML similar " + myDiffSimilar.toString(),
myDiffSimilar.hasDifferences());
}
私はあなたが比較したいことを理解していますか分かりません。あなたは 'struct'をまったく比較したいのですか?単に' int'だけを比較したいですか? 'NodeMatcher'は、兄弟のセットのどのノードが互いに比較するかを決定するために使用され、どのノードが比較の対象となるかに全く影響を与えません。 'NodeFilter'を使って、望まないものを取り除きます。 –
私は両方のXMLでちょうど 'int'タグを比較したいと思います。ブールタグが一致するかどうかは気にしません。 – Manoj
私が編集したので、不要なノードを削除するためにNodefilterを使用できます。 Xpathを使って比較する方法はありますか? – Manoj