【问题标题】:XML Unit showing similar XML as falseXML 单元将类似的 XML 显示为 false
【发布时间】:2015-01-27 06:23:07
【问题描述】:
    XML1:
    <record>
        <record name="technicalEnvelope" javaclass="XXX">
          <value name="flowReferenceId">xyz</value>
        </record>
        <record name="functionalEnvelope" javaclass="XXX">
          <value name="flowReferenceId">abc</value>
        </record>
    </record>
    XML2:
    <record>
        <record name="functionalEnvelope" javaclass="XXX">
          <value name="flowReferenceId">abc</value>
        </record>
        <record name="technicalEnvelope" javaclass="XXX">
          <value name="flowReferenceId">xyz</value>
        </record>
    </record>

    Diff myDiff = new Diff(XML1, XML2);
    assertTrue("pieces of XML are similar " + myDiff, myDiff.similar());

由于顺序不同,这两个相似的 XML 比较失败。 他将不胜感激任何帮助/指导。

【问题讨论】:

  • 我相信xmlunit需要排序后的xml作为输入。
  • 感谢 Rao 的评论,但在这里排序对我没有帮助,因为在运行时会生成一个 xml,并与预期的 xml 进行比较。
  • 前段时间有类似的问题,所以我所做的是将运行时生成的文件和静态文件传递给进行排序的程序,然后将其传递给另一个实用程序(如 xmlunit)进行比较。但这是针对特定类型的 xml,而不是针对通用 xml。
  • 谢谢 Rao ... 我找到了一个解决方案,我在下面发布了。

标签: xml assert xmlunit


【解决方案1】:
    Diff myDiff = new Diff(myControlXML, myTestXML);
    myDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
    assertTrue("pieces of XML are similar " + myDiff, myDiff.similar());

【讨论】:

  • 很高兴知道。但是,如果您有更复杂的元素,这可能不起作用。
【解决方案2】:

对于更复杂的元素,您需要告诉 XMLUnit 如何识别要相互比较的元素。这正是ElementQualifier 的工作。 ElementQualifier 的内置实现有很多(如和商使用的ElementNameAndAttributeQualifier),但如果它们都不符合您的要求,则需要您自己实现接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    相关资源
    最近更新 更多