【问题标题】:How to ignore element order when diffing with XmlUnit使用 XmlUnit 区分时如何忽略元素顺序
【发布时间】:2017-01-24 10:32:04
【问题描述】:

我有以下格式的 XML:

<Root>
    <Elem1>
        <SubElem1>A</SubElem1>
        ...
    </Elem1>
    <Elem1>
        <SubElem1>B</SubElem1>
        ...
    </Elem1>
    <Elem2>
        ...
    </Elem2>
    ...
</Root>

我想指示 XmlUnit 的差异引擎忽略 ElemN 元素的顺序,但仅限于它们的“组”内。

例如:

  • 如果上例中的第二个和第一个 Elem1 改变顺序 => 相等
  • 如果 Elem2 会在 Elem1 之前或在 Elem1 中间 => 差异

有没有办法达到这个效果?

【问题讨论】:

    标签: .net xmlunit xmldiff


    【解决方案1】:

    是的,这是ElementSelector 的工作。默认情况下,XMLUnit (2.x) 按元素出现的顺序比较元素,但您可以使用 ElementSelector 来影响选择哪个兄弟元素。

    在您的情况下,您似乎很乐意按顺序选择元素,除非它们被命名为 Elem1。对于Elem1,您希望根据嵌套在SubElement1 子项中的文本来选择对。编写这样的ElementSelector 的一种方法可能是

    ElementSelectors.ConditionalBuilder()
        .WhenElementIsNamed("Elem1")
        .ThenUse(ElementSelectors.ByXPath("./SubElem1", ElementSelectors.ByNameAndText))
        .ElseUse(ElementSelectors.Default)
        .Build();
    

    有关更多详细信息和示例,请参阅 XMLUnit user guide

    【讨论】:

    • 我必须根据我的需要调整您的答案,因为我希望将所有元素组合在一起,不仅是 Elem1 元素,而且 ElementSelector 为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2012-10-12
    • 2017-02-03
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多