当将以下两个文档与本文档中的XMLUnit (最新版本- 2.3.0)进行比较时,元素的顺序是不相关的,但是XMLUnit考虑到了这一点,而且由于新元素被附加到父标记的开头,因此在只有一个元素发生时,它将检测到多个更改。
原始XML (以前):
<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>新XML (当前):
<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实现这个结果吗?
发布于 2017-03-20 05:08:25
您希望通过指定标识对的XMLUnit来帮助ACV理解哪些ACV属于一起。但是,即使这样,您也会得到两个Difference,除了“新增的标记”之外,还会有一个“ACVS的子代是不同的”。
从您的示例来看,您似乎认为您的ACV是由N子元素的文本内容标识的。这就是你需要告诉XMLUnit的。这种情况与https://github.com/xmlunit/user-guide/wiki/SelectingNodes中的https://github.com/xmlunit/user-guide/wiki/SelectingNodes示例非常相似(将tr替换为ACV,th替换为N)。您应该能够通过
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("ACV").thenUse(ElementSelectors.byXPath("./N", ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();或者是它的变体。
https://stackoverflow.com/questions/42890455
复制相似问题