gpt4 book ai didi

java - 当 HTML 文件包含 mdash 时,如何使用 Xerces 避免 SAXParseException?

转载 作者:数据小太阳 更新时间:2023-10-29 02:48:48 24 4
gpt4 key购买 nike

我正在使用 JDK6 中的 Xerces 实现对 HTML 4.0 过渡文档执行 XPath 查询。使用以下代码:

XPath newXPath = XPathFactory.newInstance().newXPath();
XPathExpression xpathExpr = newXPath.compile(expression);
Object xPathResult = xpathExpr.evaluate(inputSource, XPathConstants.NODESET);

inputSource 是从 FileInputStream 构建的,我收到异常:

Caused by: org.xml.sax.SAXParseException: The entity "mdash" was referenced, but not declared.   at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)  at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283) at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:291)  

此消息也打印到标准输出:

[Fatal Error] :20:43: The entity "mdash" was referenced, but not declared.

如何避免这种异常?

HTML 文件是从 XML 的 XSLT 转换创建的。我认为我不一定需要它成为 ,我不确定。 HTML 将显示在 Java Swing 应用程序中。

我很难判断具体实现中的哪些信息与此问题相关。如果需要更多信息,请通过评论告诉我。


因此,我误以为 HTML 就是 XML(实际上根本没有想到这一点)。

那么,给定一个 HTML 文件,我该如何解决这个问题?

  • 为解析器提供 HTML 4 的 DTD?
  • 替换为等效项。 HTML 是从 XSLT 转换创建的,样式表是否可以设置为用等效的数字符号替换 mdash?
  • 是否有任何库可以在将 HTML 提供给解析器之前对其进行修复?我注意到出于类似目的提到了 JTidy。

最佳答案

问题是,如果呈现给 Xerces 的文档没有带有 mdash 声明的 DTD,则它不是格式正确的 XML 文档 - 所有实体都必须声明。 HTML 有一组 HTML 处理器需要了解的“内置”实体,这些应该在 DTD 中。

没有 DTD 的最简单解决方法是将 mdash 替换为其等效的数字()

关于java - 当 HTML 文件包含 mdash 时,如何使用 Xerces 避免 SAXParseException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1808887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com