はじめに
Curlでは、Curl開発者向けに技術情報サイト「Curlデベロッパーセンター」を公開しています。前編では、このサイトの「逆引きリファレンス」で紹介している記事の中から、Webアプリケーションに必要な機能の1つであるデータ操作に着目して「バリデーションチェック」と「ActiveXを使用したExcelデータ操作」を紹介しました。
後編となる今回は、XMLフォーマットの利用方法として「SAXパーサー」と「DOMパーサー」を使った解析方法について紹介していきます。
Curlアプリケーションは、クライアントサイドに特化したWebテクノロジーです。従来Webサーバが行う画面の制御やデータ分析などの処理をクライアントに分散させ、サーバとの通信は必要に応じてXMLなどのデータのみとすることで、サーバ負荷を軽減し、レスポンスの向上を図ります。
Curlアプリケーションの実行環境Curl RTEでは、このデータ形式であるXMLデータを解析するXMLパーサーを標準装備しています。このXMLパーサーを用いれば、サーバから返されたXMLデータをCurlのオブジェクトに変換し、Curlアプリケーションで使用できます。
必要環境
- Curl RTE 5.0以上
XMLフォーマットの利用(SAXパーサー)
Curlでは、標準APIとしてSAX機能が用意されています。SAXはXML文書を先頭から順番に解析し、発生したイベントをアプリケーションでキャッチして処理するAPIです。次項で紹介するDOMに比べ、解析速度が速く、メモリの消費量が少量で済むというメリットがあります。ノードの追加、削除など、XML文書を更新する機能はありません。
ここでは、SAXパーサーを利用したXML解析方法について、下記サンプルXMLを用いて紹介します。
<RecordSet> <Record name="AAA"> <Value>"123"</Value> <Value>"456"</Value> </Record> <Record name="BBB"> <Value>"xyz"</Value> </Record> </RecordSet>
SAXパーサーを使用するためには、まずDefaultHandlerクラスを継承したイベントハンドラを作成します。このクラスのstart-document、end-document、start-element、end-element、charactersメソッドを実装します。下記サンプルは、それぞれのメソッドで取得したXMLの値などの結果を、outputプロシージャにて表示させています。
{define-class public MySAXApp {inherits DefaultHandler} {constructor public {default } {construct-super} } {method public {start-document}:void {output "#start-document"} } {method public {end-document}:void {output "#end-document"} } {method public {start-element uri:String, name:String, qname:String, atts:Attributes }:void {output "#start-element"} {output " タグ = " & name} {output " 属性名 = " & {atts.get-local-name 0}} {output " 属性 = " & {atts.get-value 0}} } {method public {end-element uri:String, name:String, qname:String }:void {output "#end-element"} {output " タグ = " & name} } {method public {characters ch:StringBuf, start:int, length:int }:void {output "#characters"} {output " 要素 = " & ch} } }
各XML構文解析イベントを受け取り、呼び出されるメソッドの説明は下表の通りです。
メソッド | 説明 |
start-document | ドキュメント開始の通知を受け取ります |
end-document | ドキュメント終了の通知を受け取ります |
start-element | 要素の開始の通知を受け取ります。XMLドキュメント内の各要素の開始時にこのメソッドを起動します |
end-element | 要素の終了の通知を受け取ります。XMLドキュメント内の各要素の最後にこのメソッドを起動します |
characters | 文字データの通知を受け取ります |