XMLUnit - 添加标签?
XMLUnit - Added Tags?
将以下两个文档与XML单元进行比较时(最新版本-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()
由于元素匹配不正确,我最终进行了一些更改:
- ACV[1] - N[1]:应为“735”但实际为“701”
- ACV[1] - C[1]:预期 'S135' 但 'C10S120'
- ACV[2] - N[1]:预期为“736”但实际为“735”
- 等...然后:
- ACV[4]:添加了新标签
当我希望一次改变时:
- ACV[1]:添加了新标签
有什么方法可以使用 XMLUnit 实现这个结果吗?
您想帮助 XMLUnit 了解哪些 ACV
属于一起,方法是指定一个 ElementSelector
来标识这些对。但即便如此,你最终还是会得到两个 Difference
,除了 "new tag added" 之外,还会有一个“ACVS
的 children 的数量不同。
通过查看您的示例,您似乎认为您的 ACV
是由 N
child 的文本内容标识的。这就是您需要告诉 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();
或其变体。
将以下两个文档与XML单元进行比较时(最新版本-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()
由于元素匹配不正确,我最终进行了一些更改:
- ACV[1] - N[1]:应为“735”但实际为“701”
- ACV[1] - C[1]:预期 'S135' 但 'C10S120'
- ACV[2] - N[1]:预期为“736”但实际为“735”
- 等...然后:
- ACV[4]:添加了新标签
当我希望一次改变时:
- ACV[1]:添加了新标签
有什么方法可以使用 XMLUnit 实现这个结果吗?
您想帮助 XMLUnit 了解哪些 ACV
属于一起,方法是指定一个 ElementSelector
来标识这些对。但即便如此,你最终还是会得到两个 Difference
,除了 "new tag added" 之外,还会有一个“ACVS
的 children 的数量不同。
通过查看您的示例,您似乎认为您的 ACV
是由 N
child 的文本内容标识的。这就是您需要告诉 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();
或其变体。