SAX парсер и файл из ньюорка - PullRequest
       20

SAX парсер и файл из ньюорка

1 голос
/ 07 февраля 2012

Здравствуйте, разработчики ... просто чтобы убедиться, я хочу задать этот вопрос:

Как парсер XML SAX получает доступ к файлу .xml, который он анализирует? Загружает ли он весь файл с данного URL?

Есть ли смысл прерывать синтаксический анализ, чтобы мы могли сохранить несколько килобайт данных?

Представьте себе большой XML-файл с упорядоченными элементами. Нам нужно только несколько элементов сверху, остальные элементы уже могут быть обработаны и сохранены. Когда я остановлю синтаксический анализ в определенной точке, сохраню ли я некоторые данные (несомненно, сэкономлю время).

Спасибо за ответы.

1 Ответ

1 голос
/ 07 февраля 2012

Реализации 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 - это java.net.URL для URL.

Конечно, все это должно быть заключено в пробный улов ...

Ваш обработчик может выдать исключение, сигнализирующее, что он достиг конца того, что вы хотите проанализировать, и, перехватив это исключение, ваша программа может завершить работу без чтения всего потока.

...