我試圖解析看起來像這樣一個永無止境的XML流:在解析完整個InputStream之前,我可以使SAXParser.parse()返回嗎?
<outer>
<foo>footext</foo>
<bar>bartext</bar>
</outer>
<outer>
<foo>footext</foo>
<bar>bartext</bar>
</outer>
<outer>
<foo>footext</foo>
<bar>bartext</bar>
</outer>
...
我有我的SAXParser設置:
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
我可以用一個InputStream叫它我實現了DefaultHandler的很輕鬆地:
parser.parse(theInputStream, myHandler);
的問題是,我需要parser.parse實際回報它碰到</outer>
結束標記後,我可以返回解析出來的XML對象。這樣做的原因是,我的分析代碼(在一個名爲XMLParser的類)被稱爲在這樣的循環:
while(condition) {
Object o = xmlParser.getNextObject();
... do something with the object ...
}
是否有可能使從解析SAXParser的回報(的InputStream,DefaultHandler的)在其之前調用已閱讀完整的可用流?
包裝流當被告知做到這一點時,可以關閉所有打開的標籤,並返回EOF。雖然我只是拋出你描述的異常。 – MeBigFatGuy
我已經使用了從ContentHandler中拋出異常的技術,當它看到所有需要的數據時。當然,解析會中止 - 你不會看到更多的數據。請注意,有些解析器會從parse()方法中拋出原始異常,其他解析器會將其包裝爲自己的異常:您可能需要對不同的解析器進行一些嘗試,以找到一種可靠地將自己的異常與真實解析錯誤並在所有解析器中工作。 –