使用Java SAX解析缺少doctype声明的xhtml实体
我试图解析Tika服务器的xhtml输出。xml inputstream(我通过apache HttpClient获得)声明了一个名称空间,但没有声明dtd,根目录如下所示:使用Java SAX解析缺少doctype声明的xhtml实体,java,xml,sax,apache-tika,Java,Xml,Sax,Apache Tika,我试图解析Tika服务器的xhtml输出。xml inputstream(我通过apache HttpClient获得)声明了一个名称空间,但没有声明dtd,根目录如下所示: <html xmlns="http://www.w3.org/1999/xhtml"> 我试图强制解析器使用XHTML1.1DTD的本地副本 class XhtmlResolver implements EntityResolver { public InputSource resol
<html xmlns="http://www.w3.org/1999/xhtml">
我试图强制解析器使用XHTML1.1DTD的本地副本
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。有人能帮我吗
谢谢 您尚未发布实际给出错误的代码。但在Tika的情况下,它发生了,因为Tika希望得到格式良好的html,但没有得到 发生这种情况的一个常见场景是嵌套ContentHandler,如下所示:
ContentHandler handler = new BodyContentHandler(new ToXMLContentHandler());
只需卸下上述包装并使用:
ContentHandler handler = new ToXMLContentHandler();
一切都会好起来的
如果这发生在其他代码段中,请记住这是因为输入的HTML格式不正确。
查看详细信息
ContentHandler handler = new ToXMLContentHandler();