SAX解析器和来自网络的文件

时间:2012-02-07 12:15:32

标签: xml parsing sax

大家好开发者......为了确保,我想问这个问题:

XML SAX解析器如何访问它正在解析的.xml文件?它是否从给定的URL下载整个文件?

打破解析是否有用,以便我们可以保存几千字节的数据?

想象一下带有订购商品的大型.xml文件。我们只需要从顶部开始的几个项目,其他项目可能已经被处理和存储。当我在特定点停止解析时,我会保存一些数据(当然我会节省一些时间)。

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

SAX解析器实现以多种语言存在,答案可能是特定于实现的。但至少常见的Java实现可以从流中读取xml,无需下载整个内容。

调用Java SAX解析器以从URL解析通常看起来像

        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();
        MyHandler handler = new MyHandler();
        xr.setContentHandler(handler);
        xr.parse(new InputSource(sourceUrl.openStream()));

处理程序MyHandler是您定义的实现org.xml.sax.ContentHandler的类(最容易通过扩展org.xml.sax.helpers.DefaultHandler)而sourceURL是URL的java.net.URL

当然,所有这些都必须包含在试一试......

您的处理程序可以抛出一个异常信号表明它已经达到您要解析的结尾,并且通过捕获此异常,您的程序可以干净地完成而无需读取整个流。