J'essaie de comparer deux xml seulement partiellement en utilisant XMLUnit2. J'ai essayé ci-dessous Xpath pour comparer l'élément int
seul. Mais mon test a échoué, car il vérifie également le tag boolean
.Comment utiliser XMLUnit2 pour comparer des xml par XPATH?
Comment faire passer ce test?
@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());
}
Edit: Avec NodeFilter, j'ai enlevé les nœuds indésirables de la comparaison. Mais existe-t-il un moyen de donner Xpath, et de ne comparer que les nœuds évalués par 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());
}
Je ne suis pas sûr de comprendre ce que vous voulez comparer. Voulez-vous comparer le 'struct' du tout ou simplement le' int's? 'NodeMatcher' est utilisé pour décider quels noeuds d'un ensemble de frères et sœurs comparer les uns avec les autres, il n'a aucun effet sur les noeuds qui sont admissibles à la comparaison du tout. Vous utiliseriez 'NodeFilter' pour enlever ceux que vous ne voulez pas. –
Je veux comparer juste balise 'int' dans les deux xml. Je me fiche de savoir si les balises booléennes correspondent ou non. – Manoj
Comme j'ai modifié, je pourrais utiliser Nodefilter pour supprimer les nœuds indésirables. Y at-il un moyen d'utiliser Xpath et comparer? – Manoj