XMLフォーマットの利用(DOMパーサー)

XMLフォーマットを扱うために、Curlでは拡張コンポーネントのWSDKにDOM(Document Object Model)機能が用意されています。DOMは、XMLをツリー構造として扱い、これを「DOMツリー」といいます。XML全体を解析してDOMツリーとしてメモリ上に保存するのでデータの多いXMLを解析する場合は多くのメモリを消費します。

ここではDOMパーサーを利用したXML解析方法について、下記サンプルXMLを用いて説明します。 

<RecordSet>
  <Record name=”AAA”>
    <Value>”123″</Value>
    <Value>”456″</Value>
  </Record>
  <Record name=”BBB”>
    <Value>”xyz”</Value>
  </Record>
</RecordSet>

DOMパーサーを使用するためには、まずWSDKをインストール及びデリゲートする必要があります。下記サンプルは、XMLから取得した値をoutputプロシージャにて結果表示させています。

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”

 参考サイト

XML Data

Transforming XML

Using XPath