匹配名称相同但子值不同的标签
Matching tags with identical names but different child values
我正在尝试使用 XMLUnit 2 来比较 xml 个文件。
<composite>
<data>
<subtag>
<code>1</code>
</subtag>
<subtag>
<code>2</code>
</subtag>
</data>
</composite>
第二个文件相同,唯一的区别是 'subtag' 个标签交换了位置。
<composite>
<data>
<subtag>
<code>2</code>
</subtag>
<subtag>
<code>1</code>
</subtag>
</data>
</composite>
到目前为止,我很不走运地找到了一组适合将这两个匹配为相等的 ElementMatchers。
这个问题有开箱即用的解决方案吗?
这与 XMLUnit 用户指南中的“tr
由嵌套 th
标识”示例几乎相同。一种解决方案是使用条件 ElementSelector
并确保它在决定采用哪个 subtag
时使用正确的规则 - 请参阅 https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectors
在你的具体案例中是这样的
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("subtag")
.thenUse(ElementSelectors.byXPath("./code", ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();
应该做的。这假设您的 subtag
由其 code
子元素的嵌套文本标识。
我正在尝试使用 XMLUnit 2 来比较 xml 个文件。
<composite>
<data>
<subtag>
<code>1</code>
</subtag>
<subtag>
<code>2</code>
</subtag>
</data>
</composite>
第二个文件相同,唯一的区别是 'subtag' 个标签交换了位置。
<composite>
<data>
<subtag>
<code>2</code>
</subtag>
<subtag>
<code>1</code>
</subtag>
</data>
</composite>
到目前为止,我很不走运地找到了一组适合将这两个匹配为相等的 ElementMatchers。
这个问题有开箱即用的解决方案吗?
这与 XMLUnit 用户指南中的“tr
由嵌套 th
标识”示例几乎相同。一种解决方案是使用条件 ElementSelector
并确保它在决定采用哪个 subtag
时使用正确的规则 - 请参阅 https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectors
在你的具体案例中是这样的
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("subtag")
.thenUse(ElementSelectors.byXPath("./code", ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();
应该做的。这假设您的 subtag
由其 code
子元素的嵌套文本标识。