【问题标题】:XmlUnit: The entity "nbsp" was referenced, but not declaredXmlUnit:实体“nbsp”被引用,但未声明
【发布时间】:2013-05-05 10:15:29
【问题描述】:

我需要使用 XmlUnit 测试像 <div> </div> 这样的 XHTML 代码。 Diff 构造函数告诉我:

org.xml.sax.SAXParseException:实体“nbsp”被引用,但是 未声明。

我知道 nbsp 实体没有在 XML 中定义,但 HTML 代码不是我的,所以我不能用 #160 替换它(这将是显而易见的解决方案否则)。

我不想通过添加 <!DOCTYPE html [ <!ENTITY nbsp " "> ]> 来修改 HTML 代码,我宁愿保持代码不变。

还有其他方法可以解决这个问题吗?我知道 XmlUnit 中有一个 HTMLDocumentBuilder 类,但我找不到好的文档或示例。

【问题讨论】:

    标签: java unit-testing xmlunit


    【解决方案1】:

    您可以使用引用MathML DTD 的 DOCTYPE 声明:

    <!DOCTYPE math 
        PUBLIC "-//W3C//DTD MathML 3.0//EN"
               "http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">
    

    或相同的本地副本。

    【讨论】:

    • 如果我想添加DTD,直接添加XHTML DTD不是更好吗?我相信这可能是一个解决方案,但我更愿意保留 XHTML 源代码而不作任何更改(因为您的解决方案会引发一些新问题)。
    【解决方案2】:

    您可以启用功能“http://apache.org/xml/features/continue-after-fatal-error”以在未知实体的情况下不引发异常。不过,这仍然会发出警告:

    documentBuilderFactory.setFeature(
                "http://apache.org/xml/features/continue-after-fatal-error",
                 true);
    

    瞧瞧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-12
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2021-05-07
      相关资源
      最近更新 更多