【问题标题】:Ignore those elements that are commented out in one xml file using xmlunit使用 xmlunit 忽略在一个 xml 文件中注释掉的那些元素
【发布时间】:2014-05-01 20:48:35
【问题描述】:

我想比较两个 XML 文件。我正在使用 XMLUnit 进行比较。我在比较如下 xml sn-ps 时遇到了一些问题。

预期:

<Detail>
    <Participant>
        <PersonalInfo>
        <SSN>405018111</SSN>
        <!--<Title>MR</Title>-->
    </PersonalInfo>
    <!--<PersonalDemo>
        <Email>someemail@email.com</Email>
        <EDeliveryFlag>true</EDeliveryFlag>
    </PersonalDemo>-->
</Detail>

实际:

<Detail>
    <Participant>
        <PersonalInfo>
        <SSN>405018111</SSN>
        <Title>MR</Title>
    </PersonalInfo>
    <PersonalDemo>
        <Email>someemail@email.com</Email>
        <EDeliveryFlag>false</EDeliveryFlag>
    </PersonalDemo>
</Detail>
  1. 它将失败,因为 EXPECTED 中缺少“Title”标签(因为它已被注释掉),而它存在于 ACTUAL 中
  2. 它将失败,因为 EXPECTED 中缺少“PersonalDemo”标签(因为它已被注释掉),而它存在于 ACTUAL 中
  3. 它将失败,因为“PPSDetails”在 EXPECTED 和 ACTUAL 中具有不同数量的子节点(因为不考虑注释掉的节点)

我真正需要的是我想忽略那些在 ACTUAL 中被 EXPECTED 注释掉的元素

请帮忙

【问题讨论】:

  • 对这些元素的要求是什么?如果是 DTD 或 Schema,则无需验证即可解析。如果是您的应用程序,您必须与应用程序协商,和/或填写虚拟值。
  • 实际上 ACTUAL 是由我们的应用程序生成的。 EXPECTED中被注释掉的部分每次生成时在ACTUAL中都是不同的。这就是为什么我不想比较注释掉的部分

标签: java xml dom xmlunit


【解决方案1】:

我建议你必须编写自己的 XML 解析器,这样它才能看到你想要忽略的标签。在此任务中,您只需从预期和实际 XML 中删除被忽略的标签,并匹配其他标签以进行验证或比较。

我认为您在这里有两个选择,要么在两个解析器之间使用其中一个:

DOM parser
SAX PArser

我知道这不是最好的解决方案,所以也欢迎其他想法......

编辑

我相信您需要在XMLUint 上编写包装器。删除被忽略的标签(Wrapper Task)后将采用 XML 输入,其余功能相同。

【讨论】:

  • 我无法从 ACTUAL 中删除标签,因为它是系统生成的
  • 我相信您需要在 XMLUint 上编写包装器。删除忽略的标签(包装器任务)后将采用 XML 输入,其余功能相同。
猜你喜欢
  • 2017-02-03
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多