2011-07-19 51 views
2

有沒有辦法在SAXParser或XMLReader上調用quit()函數?有沒有辦法在DefaultHandler中停止或退出分析?

XML文檔每天只更新一次,如果元素已更改,我只想要讀取完整文檔。

在我的默認處理程序:

@Override 
public void endElement(String uri, String localName, String qName) 
throws SAXException { 

    if (localName.equals("pubDate")) { 
     if (currentValue.equals(mPreviousPubDateValue)) { 
       //exit parsing 
     } 
    } else { 
     //keep on parsing 
    } 


} 

XML文檔是相當大的,而且我希望能夠只退出它。 DefaultHandler沒有任何內置的停止解析。我也可以傳入對XMLReader的引用,但它也沒有停止自身的方法。

謝謝!

+0

怎麼樣添加一個突破;在測試日期內?您打破了操作並顯示沒有新數據的情況。 –

回答

4

你可以拋出SAXException停止解析

你可以使用它的一個子類,以保證解析失敗,因爲你的決定的,而不是隨機分析異常

+0

是的,做到了這一點,它的工作。甜而簡單! – Civilian

1

(請忽略以下,當然你拋出的SAXException做到這一點,如ratchetfreaks接聽)

有趣的問題 -

我能想到的一個辦法 -

如果您的解析器從InputStream中讀取數據,創建自己的類,它是另一個只傳遞調用的InputStream的包裝,直到您在包裝器上設置標誌。通過設置標誌,包裝器向其調用者指示EOF。然後,在默認處理程序中包含對此包裝的引用,並將包裝流傳遞給解析器。當你的處理程序確定它不必再讀取時,它會在你的包裝上設置標誌,它將EOF發送到解析器,該解析器停止解析(並拋出異常,可能是...)

這似乎是一個可行的,雖然醜陋的解決方案。也許有人有別的東西?

+1

當然,您可以包裝XMLReader而不是InputStream。 – antlersoft

+0

編輯鏈接是有原因;) –

+0

我喜歡你的想法,但拋出異常要容易得多。 :) – Civilian

相關問題