Что такое "Push-подход" и "Pull-подход" к анализу?
при подходе push parsing анализатор push генерирует синхронные события в виде документа проанализировано, и эти события могут быть обработаны приложением с помощью модели обработчика обратного вызова
Это текст, приведенный в книге Pro XML разработка С Java о саксофоне 2.0.
Что касается StAX, книга говорит:
при подходе pull события извлекаются из XML-документа под управлением приложение использование парсера.
Я хочу спросить, что означает выделенный текст ? Ответ, подходящий новичку, приветствуется:)
3 ответов
в принципе, толчок-это когда парсер говорит какому-то обработчику: "у меня есть foo, сделайте что-нибудь с ним."Тяга-это когда обработчик говорит парсеру:" дайте мне следующий foo."
Push:
if (myChar == '(')
handler.handleOpenParen(); // push the open paren to the handler
Жми:
Token token = parser.next(); // pull the next token from the parser
Push Parsers - события генерируются API в виде функций обратного вызова, таких как startDocument (), endDocument() и находятся вне контроля программиста. Мы, как программист, могли бы обрабатывать события, но генерация событий находится вне контроля.
Тянуть Парсеры - события генерируются, когда мы вызываем некоторый API. Пример показан ниже. Таким образом, мы как программист можем решить, когда генерировать события.
int eventType = xmlr.getEventType();
while(xmlr.hasNext()){
eventType = xmlr.next();
//Get all "Book" elements as XMLEvent object
if(eventType == XMLStreamConstants.START_ELEMENT &&
xmlr.getLocalName().equals("Book")){
//get immutable XMLEvent
StartElement event = getXMLEvent(xmlr).asStartElement();
System.out.println("EVENT: " + event.toString());
}
}
, клиент получает только (тянет) XML-данные, когда он явно запрашивает его.
при синтаксическом анализе pull клиент управляет потоком приложения и при необходимости может вызывать методы на синтаксическом анализаторе. Напротив, при push-обработке синтаксический анализатор управляет потоком приложения, и клиент может принимать только вызовы от анализатора.
push parsing: именно там парсер подталкивает события синтаксического анализа к приложению, наиболее вероятно, используя методы обратного вызова. Приложение может обрабатывать асинхронно после вызова любых методов парсера, так что если парсер занимает время, приложение не застревает в этой точке. Как только синтаксический анализ будет завершен, синтаксический анализатор через событие обратного вызова запустит приложение, чтобы приложение могло продолжить результат анализа.
тянуть разбора: когда приложение вытащить данные вдоль, а не в ожидании событий синтаксического анализа. Приложение может тянуть данные по одному, в соответствии с его требованиями. как и в StAX, приложение вызывает метод next() итеративно, чтобы получить следующую конструкцию в XML.