【发布时间】:2013-12-11 23:30:05
【问题描述】:
我正在尝试解析来自 Tika 服务器的 xhtml 输出。 xml 输入流(我通过 apache HttpClient 获得)声明了一个命名空间,但没有声明 dtd,根看起来像:
<html xmlns="http://www.w3.org/1999/xhtml">
如果我尝试使用 SAX 解析输入流,如果 xml 流包含实体,则会遇到错误
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 47; columnNumber: 37; The entity "rsquo" was referenced, but not declared.
我试图强制解析器使用 xhtml 1.1 dtd 的本地副本
class XhtmlResolver implements EntityResolver {
public InputSource resolveEntity(String publicId, String systemId) {
InputStream in = getClass().getResourceAsStream("src/main/java/com/w3c/xhtml/xhtml11.dtd");
return new InputSource(in);
}
}
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
XMLReader reader = saxParser.getXMLReader();
reader.setEntityResolver(new XhtmlResolver());
reader.parse(new InputSource(inputStream));
但它仍然没有解析实体。我仍然在其中包含实体的任何 xhtml 流上收到 SAXParseException。有人可以帮我从这里出去吗?
谢谢!
【问题讨论】:
标签: java xml sax apache-tika