SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CurlデベロッパーセンターPick Up(AD)

逆引きリファレンスから見る
Curl開発「データ操作」のポイント(後編)

SAXパーサー、DOMパーサーを使ったXMLフォーマットの利用方法

  • このエントリーをはてなブックマークに追加

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デベロッパーセンターPick Up連載記事一覧

もっと読む

この記事の著者

住商情報システム株式会社(スミショウジョウホウシステムカブシキガイシャ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5860 2011/03/31 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング