【问题标题】:SAX parser and a file from the neworkSAX 解析器和来自网络的文件
【发布时间】:2012-02-07 12:15:31
【问题描述】:

各位开发者您好...只是为了确定,我想问这个问题:

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

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

想象一个包含有序项目的大型 .xml 文件。我们只需要顶部的几个项目,其他项目可能已经被处理和存储。当我在特定点停止解析时,我会保存一些数据吗(肯定会节省一些时间)。

感谢您的回答。

【问题讨论】:

    标签: xml parsing sax


    【解决方案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

    当然,所有这些都必须包含在 try-catch 中...

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

    【讨论】:

    • 谢谢,我在考虑 Java 实现...只是想确定一下,你有任何论文或比较支持这个吗?
    • 我有代码支持关于标准 Java 实现的声明。请参阅最新编辑中的 sn-p。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多