プッシュ解析アプローチでは、プッシュパーサーはドキュメントの解析時に同期イベントを生成します。これらのイベントは、コールバックハンドラーモデルを使用してアプリケーションで処理できます。
これは、SAX 2.0についての本Javaを使用したPro XML Developmentに記載されているテキストです。
StAXに関しては、本は次のように述べています。
プルアプローチでは、パーサーを使用してアプリケーションの制御下でXMLドキュメントからイベントがプルされます。
強調表示されたテキストの意味は何ですか?初心者にふさわしい答えをいただければ幸いです:)
基本的に、プッシュとは、パーサーがハンドラーに「私はfooを持っている、それを使って何かをする」と言うときです。プルとは、ハンドラーがパーサーに「次のfooをください」と言うときです。
押す:
if (myChar == '(')
handler.handleOpenParen(); // Push the open paren to the handler
引く:
Token token = parser.next(); // pull the next token from the parser
プッシュパーサー-イベントは、startDocument()、endDocument()などのコールバック関数の形式でAPIによって生成され、プログラマーの制御を超えています。私たちプログラマーはイベントを処理できますが、イベントの生成は制御できません。
プルパーサー-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データを取得(プル)します。
プル解析を使用すると、クライアントはアプリケーションスレッドを制御し、必要に応じてパーサーのメソッドを呼び出すことができます。対照的に、プッシュ処理では、パーサーがアプリケーションスレッドを制御し、クライアントはパーサーからの呼び出しのみを受け入れることができます。
Push parsing:これは、パーサーが解析イベントをアプリケーションにプッシュする場所であり、おそらくコールバックメソッドを使用します。アプリケーションは、パーサーメソッドを呼び出した後、非同期で処理できるため、パーサーに時間がかかっても、アプリはその時点でスタックしません。解析が完了するとすぐに、パーサーはそのコールバックイベントを介してアプリをトリガーし、アプリが解析結果をさらに続行できるようにします。
pull parsing:アプリが解析イベントを待つのではなく、データをプルする場合。アプリは、要件に応じて、1つずつデータをプルできます。 StAXと同様に、アプリはnext()メソッドを繰り返し呼び出して、XMLで次の構成を取得します。