java - 有意义的 XML 比较

标签 java xml xmlunit

我正在尝试实现有意义的 XML 比较。我想比较两个不同的 XML 以了解它们是否“有意义”相同。

示例 XML 1:

    <?xml version="1.0" encoding="UTF-8"?>
    <al:moAttribute>
         <al:name>impiId</al:name>
         <al:value>616731935012345678</al:value>
    </al:moAttribute>

    <al:moAttribute>
          <al:name>impuId</al:name>
          <al:value>tel:+16167319350</al:value>
    </al:moAttribute> 

XML 2:

    <?xml version="1.0" encoding="UTF-8"?>
    <al:moAttribute>
          <al:name>impuId</al:name>
          <al:value>tel:+16167319350</al:value>
    </al:moAttribute>
    <al:moAttribute>
         <al:name>impiId</al:name>
         <al:value>616731935012345678</al:value>
    </al:moAttribute>

在此示例中,两个 XML “有意义”相同,只是元素顺序不同。我想比较一下它们是否几乎相等。

我尝试了这个解决方案:

Best way to compare 2 XML documents in Java

我尝试过:

XMLUnit.setIgnoreWhitespace(true);
diff.identical (...);
diff.similar (...);

但是如果 XML 的顺序不同,XML 比较将返回 false。

请问有什么建议吗?

最佳答案

任何 XML 级别的工具都会假定元素的顺序很重要。如果您知道在您的特定词汇表中,元素的顺序并不重要,那么您需要一个能够帮助您理解词汇表的工具。因此,最好的选择是编写一个规范化转换(通常在 XSLT 中),从文档中删除不相关的差异(例如,通过对某个合适的键对元素进行排序),以便在使用标准 XML 工具(可能在 XML 之后)进行比较时,它们比较相等规范化)。

关于java - 有意义的 XML 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31487551/

相关文章:

java - 无法从 Java 启动 telnet session

java - 优化词搜索需求的建议

c++ - 使用 TinyXML 在 XML 文档中查找特定节点

xml - XmlUnit 是否有任何替代方案?

java - 为什么这两个 xml 字符串不相似

java - Android 指纹扫描仪,检测用于身份验证的手指

java - 如何从纯数字字符串中获取 11 个字母数字的 UNIQUE ID?

xml - 如何在 XSLT 中将 "single quote"替换为 "double single quote"

javascript - 需要将变量设置为特定范围的数字

xmlunit - 如何在 XMLUnit 中比较两个相似的 XML 文件