XMLフォーマットの利用(DOMパーサー)
続いて、SAX機能のほかにも、XMLフォーマットを扱うために、Curlでは拡張コンポーネントのWSDKにDOM(Document Object Model)機能が用意されています。
DOMパーサーを使用するためには、まずWSDKをインストール及びデリゲートする必要があります。
DOMは、XMLをツリー構造として扱うため「DOMツリー」と呼ばれています。XML全体を解析してDOMツリーとしてメモリ上に保存するため、データの多いXMLを解析する場合は多くのメモリ領域が必要になります。
ここでは、DOMパーサーを利用したXML解析方法について、下記サンプルXMLを用いて紹介します。サンプルは、XMLから取得した値の結果をoutputプロシージャにて表示させています。
<RecordSet> <Record name="AAA"> <Value>"123"</Value> <Value>"456"</Value> </Record> <Record name="BBB"> <Value>"xyz"</Value> </Record> </RecordSet>
XMLの読取り
XMLフォーマットをデータモデルに変換する場合、build-xmlプロシージャを使用します。build-xmlプロシージャの戻り値はXDMDocumentオブジェクトになります。build-xmlプロシージャで解析可能なデータはUrl、StringInterface、TextInputStream、ByteInputStreamです。
let xml:XDMElement = {build-xml preserve-whitespace? = true, XMLデータ}
XMLの解析
XMLを解析するために、まずXDMElementのrootでルートの要素を取得します。また、各子要素を取得するにはget-elementsメソッドを実行します。取得した要素から属性を取得するにはattributes、テキストを取得するにはget-textを利用します。以下に、コメント入りでサンプルを掲載します。
||build-xmlプロシージャを用いて、XMLをのCurlのXML構造体オブジェクトに変換します。 ||更に、build-xmlの戻り値であるXDMDocumentから、そのXMLのルートとなるエレメントを取得します。 let root:XDMElement = {build-xml preserve-whitespace? = false, XMLデータのURL}.root ||以下XMLの解析 ||get-elementsメソッドで、エレメントを取得します。 let record-elements:{Array-of XDMElement} = {root.get-elements} {for record-element:XDMElement in record-elements do ||attributesアクセッサで、属性を取得します。 {output "Record attribute = " & record-element.attributes["name"]} let value-elements:{Array-of XDMElement} = {record-element.get-elements} {for value-element in value-elements do ||get-textメソッドでテキストを取得します。 {output " Value text = " & {value-element.get-text}} } }
Record attribute = AAA Value text = "123" Value text = "456" Record attribute = BBB Value text = "xyz"
まとめ
今回は、前後編にわたりCurlのデータ操作に着目して紹介してきました。これらはCurlのAPIのほんの一部分にすぎませんが、そのほかにもCurlデベロッパーセンターの「Curl開発者ガイド」では、Curlが提供する豊富なAPIの解説やサンプルなどを掲載しています。業務系のWebアプリケーションをより効率的に開発するために、APIを活用してみてはいかがでしょうか。
参考資料
- Curl開発者ガイド:SAX XML インターフェイスの使用
- XML Data
- Transforming XML
- Using XPath(Curlプログラムのダウンロード)