Сравнение XmlReader и SAX Reader

Аналогично модулю чтения Simple API for XML (SAX), XmlReader — однопроходный курсор только для чтения.Он обеспечивает быстрый потоковый доступ к входным данным без кэширования.Он может считывать поток или документ.Класс позволяет запрашивать данные и пропускать записи, не представляющие интереса для приложения.Значительное различие заключается в том, что модель SAX является моделью принудительной отправки, в которой средство синтаксического анализа передает события приложению, каждый раз оповещая его о прочтении нового узла, а приложение, использующее XmlReader, может произвольно запрашивать узлы из модуля чтения.Преимущества модели Pull:

Преимущество

Описание

Управление состоянием

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

Несколько входных потоков

Модель Pull позволяет клиентам соединять несколько входных потоков.Сделать это в модели принудительной отправки чрезвычайно сложно.

Организация уровней

Модель принудительной отправки может быть построена поверх модели Pull.Наоборот — невозможно.

Устранение лишних копий строк

Обычно данные считываются из буфера средства синтаксического анализа в строковый объект, который затем принудительно отправляется в буфер клиента.Модель Pull позволяет клиенту назначить для средства синтаксического анализа буфер, в который будет напрямую записана строка.

Выборочная обработка

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

См. также

Основные понятия

Чтение XML с помощью XmlReader

Другие ресурсы

Использование класса XmlReader