Какой метод синтаксического анализа использует XMLTextReader? - PullRequest
3 голосов
/ 27 марта 2009

Какой метод синтаксического анализа использует XMLTextReader? Я сбит с толку. Сакс или Дом?

Ответы [ 3 ]

9 голосов
/ 27 марта 2009

Ни один, на самом деле - это pull-парсер . Он не создает полную объектную модель в памяти (DOM) и не анализирует весь документ, вызывая события, на которые клиент может реагировать (SAX).

Вместо этого клиент контролирует синтаксический анализ, запрашивая синтаксический анализатор сделать немного больше чтения, затем проверяя его состояние и реагируя соответственно, затем прося его прочитать немного больше и т. Д.

2 голосов
/ 27 марта 2009

Прежде всего, SAX - это API-интерфейс только для Java. Не зависящий от языка термин для этого - push-разбор, и XmlTextReader не использует эту технику.

DOM - это стандарт W3C, в .NET реализованы уровни 1 и 2 DOM. Однако эта функциональность реализована в классе XmlDocument, который может загружать документ с помощью XmlTextReader.

XmlTextReader анализирует XML с использованием синтаксического разбора (Java-эквивалент этого - StAX), который в основном противоположен SAX / push-разбору. Вместо того, чтобы получать уведомление, когда читается новая сущность, вы запрашиваете следующую сущность в документе, когда вы готовы к этому (кстати, можно реализовать синтаксический анализатор стиля SAX поверх анализатора по запросу, но не другим способом). вокруг).

1 голос
/ 27 марта 2009

Парсеры DOM читают весь XML-документ и создают его представление в виде иерархии объектов в памяти.

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

XMLTextReader считывает один XML-токен за раз, поэтому он ближе к SAX, но не обеспечивает обратных вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...