将以下两个文档与XMLUnit(最新版本 - 2.3.0)进行比较时 在本文档中,元素的顺序是无关紧要的,但是XMLUnit正在考虑这一点,并且由于新元素被附加到父标记的开头,所以当只有一个发生时,它会检测到多个更改。
<ACVS>
<ACV>
<N>735</N>
<C>S135</C>
</ACV>
<ACV>
<N>736</N>
<C>C0S135</C>
</ACV>
<ACV>
<N>7Q4</N>
<C>C0S135</C>
</ACV>
</ACVS>
<ACVS>
<ACV>
<N>701</N>
<C>C10S120</C>
</ACV>
<ACV>
<N>735</N>
<C>S135</C>
</ACV>
<ACV>
<N>736</N>
<C>C0S135</C>
</ACV>
<ACV>
<N>7Q4</N>
<C>C0S135</C>
</ACV>
</ACVS>
Diff fileChanges = DiffBuilder.compare(Input.fromFile(previous))
.withTest(Input.fromFile(current))
.ignoreWhitespace()
.checkForSimilar()
.build();
fileChanges.getDifferences()
由于元素匹配不正确,我最终会进行一些更改:
当我希望进行一次改变时:
有什么办法可以使用XMLUnit实现这个结果吗?
答案 0 :(得分:0)
您希望通过指定标识对的ACV
来帮助XMLUnit了解哪些ElementSelector
属于一起。但即便如此,除了&#34;添加新标签之外,你最终还会有两个Difference
s&#34; ACVS
的孩子数量会有所不同。
通过查看您的示例,您似乎会考虑由ACV
孩子的文字内容确定的N
。这是您需要告诉XMLUnit的内容。这种情况与https://github.com/xmlunit/user-guide/wiki/SelectingNodes中的tr
示例非常相似(将tr
替换为ACV
,将th
替换为N
。您应该能够通过
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("ACV").thenUse(ElementSelectors.byXPath("./N", ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();
或其变体。