連載
» 2001年03月23日 00時00分 公開

VBScriptでXMLプログラミング(2):DOMを使って目的の情報へダッシュ (3/4)

[西谷亮,マイクロソフト株式会社 ]

XPath式の利用

 XPathの書式を用いて取得したい要素や属性(Attribute)を指定することで、より少ないコード量で求める値を取得することができるようになります。先ほどの例と同じように、books要素の配下にあるitem要素内のtitle要素の値を取得したいというような場合のコードを見てみましょう。

01 : Dim objDOM, rtResult, nodeList, obj
02 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
03 : rtResult = objDOM.load("Sample.xml")
04 : If rtResult = True Then
05 :   Set nodeList = objDOM.documentElement.selectNodes("/books/item/title")
06 :   For Each obj In nodeList
07 :     MsgBox obj.nodeName & " : " & obj.text
08 :   Next
09 : End If
10 : Set objDOM = Nothing
リスト4 XPathを用いてtitle要素を取得する(GetTitle2.vbs

 では、順にコードを追っていきましょう。

 1行目から3行目までは、いままでと同様に利用する変数の宣言を行い、XML文書のロードを行っています。

 4行目と9行目は、ドキュメントが正常に読み込まれたときの動作であることを条件分岐によって指定しています。

 いままでと異なるのが、ここから先の4行のコードです。

 5行目にあるコードが XPath 式を用いた形での指定方法です。documentElementオブジェクト内に実装されたselectNodesメソッドを実行する際のパラメータとしてXPath式を与えます。"/books/item/title"という指定は、ルート・エレメントからたどり、books要素配下のitem要素内のtitle要素を明示的に指定していることになります。

 XPath 式によって指定されたデータを順に表示するため、For Each〜Next文を用いています(6〜8行目)。

 いままでは、XML文書内のすべてのデータを操作していた部分をこのように明示的な指定を行うことによって、作業を省略することができるようになっています。つまり、先ほどのようにループを用いてすべてのデータを操作することなく、目的のデータへとたどり着くことができるということです。実際のコード量を減らすことができることから、アプリケーション自身にバグを含ませてしまったり、無限ループから抜け出せなくなってしまったりということはなくなってくるでしょう。

 ただし、この手法を用いるときにも注意が必要です。それは、あらかじめターゲットとなるXML文書の構造を知っていることが前提となってしまう点です。構造を知らない状態では、データの所在を特定することができませんので、このようにXPath式を用いた検索などを行うことはできないのです。実際のソリューションなどでは、このような利用局面に応じたコーディングの選択を行っていかなければならないことを付け加えておきたいと思います。

Microsoft XML Parser 3.0において実装されているXPath式について

 Microsoft XML Parser 3.0で実装されているXPath式は、1999年11月16日にW3Cにおいて勧告された仕様に基づいています。従って、ここで紹介しているselectNodesメソッドにおいて指定される文字列の書式については、この仕様(http://www.w3.org/TR/xpath)を参考に記述していくことができます(XPathの勧告仕様文書の日本語訳が、インフォテリア株式会社のホームページ上で公開されています。[http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm])。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。