问题
I have 2 xml files:
The problem is in attributes prefixes.
<element xmlns:prefix1="namespace" prefix1:attribute="some value">Some text</element>
<element xmlns:prefix2="namespace" prefix2:attribute="some value">Some text</element>
these two xml are the same, with the same namespace, but with different prefixes. If I compare with xmlunit -> assertion fails. How can I handle it?
in case of similar() or identical() comparison I have error:
Expected attribute name 'message:MessageNameString' but was 'null'
Expected attribute name 'message:MessageVersion' but was 'null'
Expected attribute name 'null' but was 'mes:MessageNameString'
Expected attribute name 'null' but was 'mes:MessageVersion'
回答1:
The following test passes the "similar" check but fails the "identical" check:
String control = "<prefix1:element xmlns:prefix1=\"namespace\" prefix1:attribute=\"x\">Some text</prefix1:element>";
String test = "<prefix2:element xmlns:prefix2=\"namespace\" prefix2:attribute=\"x\">Some text</prefix2:element>";
try
{
Diff diff = XMLUnit.compareXML( control, test );
assertTrue( "Similar", diff.similar() );
assertTrue( "Identical", diff.identical() );
}
catch ( Exception e )
{
fail( e.getMessage() );
}
From the xmlunit API docs:
- identical: the content and sequence of the nodes in the documents are exactly the same
- similar: the content of the nodes in the documents are the same, but minor differences exist e.g. sequencing of sibling elements, values of namespace prefixes, use of implied attribute values
So using the "similar" check should give you what you want.
Edit: added prefixed attributes, same result.
回答2:
// identical
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), true)
// similar
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), false)
回答3:
With XMLUnit 1.x:
// Similar
XMLAssert.assertXMLEqual()
// Identical
XMLAssert.assertXMLIdentical()
With XMLUnit 2.x:
import static org.xmlunit.assertj.XmlAssert.assertThat;
...
// Similar
assertThat(xmlResult).and(xmlExpected).areSimilar();
// Identical
assertThat(xmlResult).and(xmlExpected).areIdentical();
See https://github.com/xmlunit/xmlunit#comparing-two-documents
来源:https://stackoverflow.com/questions/13358305/how-to-compare-two-xml-with-the-same-namespace-but-different-prefixes-using-java