【发布时间】:2012-02-07 12:15:31
【问题描述】:
各位开发者您好...只是为了确定,我想问这个问题:
XML SAX 解析器如何访问它正在解析的 .xml 文件?它是否从给定的 URL 下载整个文件?
打破解析有什么用,以便我们可以保存几千字节的数据?
想象一个包含有序项目的大型 .xml 文件。我们只需要顶部的几个项目,其他项目可能已经被处理和存储。当我在特定点停止解析时,我会保存一些数据吗(肯定会节省一些时间)。
感谢您的回答。
【问题讨论】:
各位开发者您好...只是为了确定,我想问这个问题:
XML SAX 解析器如何访问它正在解析的 .xml 文件?它是否从给定的 URL 下载整个文件?
打破解析有什么用,以便我们可以保存几千字节的数据?
想象一个包含有序项目的大型 .xml 文件。我们只需要顶部的几个项目,其他项目可能已经被处理和存储。当我在特定点停止解析时,我会保存一些数据吗(肯定会节省一些时间)。
感谢您的回答。
【问题讨论】:
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。
当然,所有这些都必须包含在 try-catch 中...
您的处理程序可以抛出一个异常,表明它已到达您要解析的内容的末尾,并且通过捕获此异常,您的程序可以干净地完成而无需读取整个流。
【讨论】: