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プログラムのダウンロード)

