使用Java SAX解析缺少doctype声明的xhtml实体

使用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

我试图解析Tika服务器的xhtml输出。xml inputstream(我通过apache HttpClient获得)声明了一个名称空间,但没有声明dtd,根目录如下所示:

<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();