PrathapR
5 years agoFrequent Contributor
How to ignore nodes with It values when comparing two xmls with XMLUnit2
Comparing two xml files in soapui using groovy with XMLUnit2, Have some weird cases which are different in both files, but are acceptable. So have to ignore/skip those.
ResXML1:
<alpha:Errors> <alpha:Error ShortText="SHiff" Type="11">Generic error occured.</alpha:Error> <alpha:Error ShortText="SHiff" Type="12">Generic error occured.</alpha:Error> </alpha:Errors> <ShiftAttributes> <ShiftAttribute ShiftAttributeCode="41"/> <ShiftAttribute ShiftAttributeCode="17"/> </ShiftAttributes> <alpha:PriceInfo AgeQualifyingCode="10" Amount="19999.00" DiscountTypes="3" AMZAmount="225.00" NetAmount="19999.00" MCH="1" ValueAddAmount="150.00"/>
ResXML2:
<alpha:Warnings> <alpha:Warning ShortText="SHiff" Type="11">Generic error occurred.</alpha:Warning> </alpha:Warnings> <ShiftAttributes> <ShiftAttribute ShiftAttributeCode="17"/> <ShiftAttribute ShiftAttributeCode="41"/> </ShiftAttributes> <alpha:PriceInfo AgeQualifyingCode="10" Amount="19999.0" DiscountTypes="3" AMZAmount="225.0" NetAmount="19999.0" MCH="1" ValueAddAmount="150.0"/>
If anyone have any idea, please help me in below conditions.
1) How to ignore child attribute order? tried different nodematchers(byXpath, byNameandText etc..), but no luck. <ShiftAttribute ShiftAttributeCode="41"/> <ShiftAttribute ShiftAttributeCode="17"/> 2) How to ignore decimal value, 100.0 & 100.00. Tried to use BigDecimalElementDifferenceEvaluator, but cannot able to complete in soapui.
Found solution for first part of the above question
diff = DiffBuilder.compare(testxml)
.withTest(resxml)
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.conditionalBuilder().whenElementIsNamed("ShiftAttribute").thenUse(ElementSelectors.byNameAndAttributes("ShiftAttributeCode")).elseUse(ElementSelectors.byName).build()))
.build();