Search code examples
javaxmltestingparsingcomparison

Best way to compare 2 XML documents in Java


I'm trying to write an automated test of an application that basically translates a custom message format into an XML message and sends it out the other end. I've got a good set of input/output message pairs so all I need to do is send the input messages in and listen for the XML message to come out the other end.

When it comes time to compare the actual output to the expected output I'm running into some problems. My first thought was just to do string comparisons on the expected and actual messages. This doens't work very well because the example data we have isn't always formatted consistently and there are often times different aliases used for the XML namespace (and sometimes namespaces aren't used at all.)

I know I can parse both strings and then walk through each element and compare them myself and this wouldn't be too difficult to do, but I get the feeling there's a better way or a library I could leverage.

So, boiled down, the question is:

Given two Java Strings which both contain valid XML how would you go about determining if they are semantically equivalent? Bonus points if you have a way to determine what the differences are.


Solution

  • Sounds like a job for XMLUnit

    Example:

    public class SomeTest extends XMLTestCase {
      @Test
      public void test() {
        String xml1 = ...
        String xml2 = ...
    
        XMLUnit.setIgnoreWhitespace(true); // ignore whitespace differences
    
        // can also compare xml Documents, InputSources, Readers, Diffs
        assertXMLEqual(xml1, xml2);  // assertXMLEquals comes from XMLTestCase
      }
    }