【问题标题】:Using XMLUnit(Java) to compare XML strings containing entities使用 XMLUnit(Java) 比较包含实体的 XML 字符串
【发布时间】:2012-02-15 06:53:24
【问题描述】:

JDK 1.7.0 XMLUnit 1.3

比较此控件 XML 字符串时:

            String controlXml = "" +
                "<client>" +
                "   <name>Hello&nbsp;World</name>" +
                "</client>";

使用这个测试 XML 字符串:

            String testXml = "" + 
                "<client>" +
                "   <name>Hello&nbsp;World</name>" +
                "</client>";

XMLUNIT 返回 false,我期待它返回 true(没有差异)。

这是我的用法:

XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreWhitespace(true);
Diff diff = new Diff(controlXml,testXml);
boolean result = diff.similar(); //result is false

我还在控制台窗口中收到以下错误:

[Fatal Error] :1:103: The entity "nbsp" was referenced, but not declared.

我不知道在这里做什么。

我查看了它,并获得了一些关于使用 Google 的 EntityResolver 的信息,但这一切都非常令人困惑。

我需要将实体视为纯文本。从逻辑上讲,作为纯文本,它们是相等的。

我尝试切换以下选项:

        XMLUnit.setExpandEntityReferences(false);  //tried true, false
        XMLUnit.setIgnoreDiffBetweenTextAndCDATA(false);  //tried true, false

没有任何效果。 请帮忙,我完全迷路了。谢谢!

【问题讨论】:

  • 好吧,&amp;nbsp; 除非明确声明,否则 XML 处理器不会识别。在 XML 中只有五个 pre defined 实体;另一方面,HTML 大约有 250 个。

标签: java xml entity entities xmlunit


【解决方案1】:

字符实体 ( ) 和数字实体 ( ) 之间似乎存在差异。

与字符实体相比,XMLUnit 在数字实体方面没有问题。

我认为一个简单的字符实体到数字实体的过程应该足以解决我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2020-07-23
    • 1970-01-01
    • 2023-04-01
    • 2017-07-03
    相关资源
    最近更新 更多