【问题标题】:Comparing similar xml files with XmlUnit with unordered tags (same tag name with different attributes)将类似的 xml 文件与带有无序标签的 XmlUnit 进行比较(相同的标签名称具有不同的属性)
【发布时间】:2011-07-05 09:30:09
【问题描述】:

我正在成功尝试 XmlUnit,并且对我的工作非常有帮助。现在,我有一个小问题,我不知道如何解决。我有一个java类,它有一个Set,当它转换成XML时,里面的元素可以有任何顺序。

当我在 XmlUnit 中尝试这两个文件时,它可以工作(Diff 说它们相似):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
    <AvailableMeasures>
        <MeasureDescriptorA name="netInput_mynetwork"></MeasureDescriptorA>
        <MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
    </AvailableMeasures>
</Monitor>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
    <AvailableMeasures>
        <MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
        <MeasureDescriptorA name="netInput_mynetwork"></MeasureDescriptorA>
    </AvailableMeasures>
</Monitor>

但是当标签具有相同的名称(具有不同的属性)时,它不起作用(它混合了属性,并期望另一个标签中的那个):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
    <AvailableMeasures>
        <MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
        <MeasureDescriptor name="netInput_mynetwork"></MeasureDescriptor>
    </AvailableMeasures>
</Monitor>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
    <AvailableMeasures>
        <MeasureDescriptor name="netInput_mynetwork"></MeasureDescriptor>
        <MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
    </AvailableMeasures>
</Monitor>

有什么解决办法吗?

【问题讨论】:

  • 我自己找到了解决方案,用这段代码: Diff diff = new Diff(controlXml, responseXml); diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());它完成了;)
  • 能否请您自己发布该问题的答案,然后接受该答案?此外,如果他们解决了您的问题,您需要接受之前问题的答案。
  • 好吧,我想我无法回答我自己的问题。我现在会回答自己。

标签: java xml xmlunit


【解决方案1】:

我自己找到了解决方案。

Diff diff = new Diff(controlXml, responseXml);
diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());

【讨论】:

    【解决方案2】:

    这似乎适用于 XMLUnit 2.0:

        Diff myDiff = DiffBuilder.compare(Input.fromString(expected))
                .withTest(Input.fromString(actual))
                .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndAllAttributes))
                .checkForSimilar()
                .build();
    

    【讨论】:

      【解决方案3】:

      上述解决方案仅适用于属性顺序,但如果您遇到相同元素类型顺序的问题,如下所示:

          <CustomerDataSet>
              <CustomerData>
                  <Key>ACCOUNT_TYPE</Key>
                  <Value>GREEN</Value>
              </CustomerData>
              <CustomerData name = "bla">
                  <Key>EMAIL_ADDRESS</Key>
                  <Value>MVNO_Automation_8@test.fr</Value>
              </CustomerData>
              <CustomerData>
                  <Key>DATE_OF_BRITH</Key>
                  <Value>01-01-1976</Value>
              </CustomerData>
          </CustomerDataSet>
      
                  <CustomerDataSet>
              <CustomerData name = "bla">
                  <Key>EMAIL_ADDRESS</Key>
                  <Value>MVNO_Automation_8@test.fr</Value>
              </CustomerData>
              <CustomerData>
                  <Key>ACCOUNT_TYPE</Key>
                  <Value>GREEN</Value>
              </CustomerData>
              <CustomerData>
                  <Key>DATE_OF_BRITH</Key>
                  <Value>01-01-1976</Value>
              </CustomerData>
          </CustomerDataSet>
      

      但是,您可以改用RecursiveElementNameAndTextQualifier 来解决此问题。

      【讨论】:

        猜你喜欢
        • 2020-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多