我有 2 个 XML。我一直在使用 XMLUnit 来比较 2 个 xml 字符串。问题是我无法忽略元素出现的顺序。我尝试覆盖 ElementQualifier 以及 DifferenceListener 但这对这种情况没有帮助。
控制 XML
<xs:complexType>
<xs:anotation>
<xs:description>
<Description>Country</Description>
</xs:description>
</xs:anotation>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
测试 XML
<xs:complexType>
<xs:anotation>
<xs:description>
<Description>Country</Description>
</xs:description>
</xs:anotation>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
</xs:sequence>
</xs:complexType>
请注意,在 Test XML 中添加了另一个序列,并删除了第一个序列的最后一个元素(国家)。
XMLUnit 抱怨city
在第二个序列中没有命名元素。它按顺序排列元素。我尝试了覆盖ELementNameAndAttributeQualifier但没有产生预期的结果。此外,覆盖RecursiveElemenNameAndTextQualifier也没有帮助。RecursiveElemenNameAndTextQualifier不起作用的原因是第一个序列不匹配。我将如何接近并确保
public boolean qualifyForComparison(Element element, Element element1)
{
// should return true only when **element 1** has all elements of **element**
}