2013-11-26 60 views
2

我想解析Tika服務器的xhtml輸出。該XML的InputStream(即我通過一個Apache的HttpClient獲得)聲明瞭一個命名空間,但不聲明DTD,根的樣子:爲xhtml解析實體缺乏與Java SAX的doctype聲明

<html xmlns="http://www.w3.org/1999/xhtml"> 

如果我嘗試解析使用SAX輸入流我碰上錯誤如果XML流包含我試圖迫使解析器使用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)); 

的本地副本實體

Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 47; columnNumber: 37; The entity "rsquo" was referenced, but not declared. 

,但它仍然沒有解決實體。我仍然在任何有一個實體的xhtml流上發生SAXParseException。有人可以幫我從這裏出去嗎?

謝謝!

回答

0

您尚未發佈實際發生錯誤的代碼。但是在Tika的情況下,它發生是因爲Tika期待格式良好的html,但沒有得到一個。

一個常見的場景,出現這種情況是嵌套ContentHandlers時,如下圖所示:

ContentHandler handler = new BodyContentHandler(new ToXMLContentHandler()); 

只是刪除上述包裝及用途:

ContentHandler handler = new ToXMLContentHandler(); 

,一切都應該罰款。

如果這在其他代碼片段中發生,請記住,這是因爲輸入HTML格式不正確。 查詢JIRA issue瞭解詳情。