2011-07-19 48 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

相关问题