How can I compare two similar XML files in XMLUnit
Asked Answered
S

3

5

I want to use XMLUnit to compare two similar XML files.

Basically every thing is same, File1 is a copy of File2 , but in File2 I have changed the order of some elements in one node.

I am trying to run a test where it compares these files and returns a result of similar and not treat these files as different.

Slider answered 12/11, 2009 at 22:57 Comment(0)
B
8

I think this link can help you - http://www.ibm.com/developerworks/java/library/j-cq121906.html#N10158

Basically, if your File1 is like -

<account>
 <id>3A-00</id>
 <name>acme</name>
</account>

And File2 is same, but only differs in order of <name> and <id> -

<account>
 <name>acme</name>
 <id>3A-00</id>
</account> 

Then you can write a test like below which will compare these and return similar.

public void testIdenticalAndSimilar() throws Exception {
   String controlXML = "<account><id>3A-00</id><name>acme</name></account>";
   String testXML = "<account><name>acme</name><id>3A-00</id></account>"; 
   Diff diff = new Diff(controlXML, testXML);
   assertTrue(diff.similar());
   assertFalse(diff.identical());
}

Hope that helps.

Bridal answered 12/11, 2009 at 23:18 Comment(3)
When I use a String the comparison works fine. But when I use the file it doesn't. I declare InputSource object for each file and then create a Diff object with the two InputSource objects in it. When I use the similar command in this way it fails and says that the files are different. Is this a valid way of comparing?Slider
How big is your XML file? Could you paste the content here?Bridal
How to handle if any tag is missing say for example, from controlXML id tag is missing String controlXML = "<account><name>acme</name></account>"; String testXML = "<account><name>acme</name><id>3A-00</id></account>"; if there are more than 3 child node then comparison showing wired resultKanya
E
3

This should do it:

    // Assuming file1 and file2 are not deeply nested XML files
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc1 = docBuilder.parse(file1);
    Document doc2 = docBuilder.parse(file2);

    // SOLUTION 1: Are the files "similar"?
    Diff diff = new Diff(doc1, doc2);
    System.out.println("Similar (true/false): " + diff.similar());

    // SOLUTION 2: Should you want detailed differences (especially useful for deeply nested files)
    Diff diff = new Diff(doc1, doc2);
    diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier()); 
    DetailedDiff detailedDiff = new DetailedDiff(diff); 
    System.out.println("Detailed differences: " + detailedDiff.getAllDifferences().toString());

Hope that helps a bit. Read up on XMLUnit here.

Emmalynn answered 31/1, 2014 at 7:24 Comment(0)
I
0
diff =
        DiffBuilder.compare(expected)
          .withTest(toBeVerified)
          .ignoreWhitespace()
          .checkForSimilar()
          .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText, ElementSelectors.byName))
          .build();
Infinitive answered 15/10, 2021 at 8:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.