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

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

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

DOMを利用してデータへアクセス

 ターゲットとなっているデータへのアクセス方法は、幾つかの方法が挙げられます。1つは、前回紹介したように要素内を検索し、目的となるデータを探して得る方法です。

01 : Dim objDOM, rtResult
02 :
03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
04 : rtResult = objDOM.load("Sample.xml")
04': '文字列データから取得する場合は、以下のとおり
04': 'なお、strXMLDocumentには、文字列としてXMLドキュメントが
04': '格納されていると仮定します。
05 : rtResult = objDOM.loadXML(strXMLDocument)
06 : If rtResult = True Then
07 :   procDispDatas objDOM.childNodes
08 : End If
09 : Set objDOM = Nothing
10 :
11 : Sub procDispDatas(objNode)
12 :   Dim obj
13 :   For Each obj In objNode
14 :     If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then
15 :       MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue
16 :     End If
17 :     If obj.hasChildNodes Then
18 :       procDispDatas obj.childNodes
19 :     End If
20 :   Next
21 : End Sub
リスト3 要素内を検索し、title要素を取得する(GetTitle.vbs

 このコードは、前回紹介したものとほぼ同じです。このようにすることで文書全体を操作し、中に存在するデータを取得することができます。

 取得したいデータは、必ずしも要素(Element)の中にある値であるとは限りません。属性(Attribute)を取得したいことがあるかもしれませんし、要素の名称かもしれません。そのような場合には、このコードを若干修正する必要があります。具体的には、14行目にあたる部分のコードです。この行では、どのようなデータを取得したいのかを指定しています。この例では、titleという要素の中にある値を取得するということで2つの条件が指定されています。このコードの根拠となるのが以下の表です。

DOMノードタイプ
NODE_ELEMENT 1 <artist type="band">The Offspring</artist>
NODE_ATTRIBUTE 2 <artist type="band">The Offspring
NODE_TEXT 3 <artist type="band">The Offspring
NODE_PROCESSING_INSTRUCTION 7 <?xml version="1.0"?>
NODE_DOCUMENT_TYPE 10 <!DOCTYPE compactdiscs SYSTEM "cds.dtd">
表1 ノードのタイプ
※注:表中のノードタイプという列に書かれたタイプ指定のための文字列は、スクリプト環境からは利用できませんので、実際の実装時には、値を直接指定してください。文字列での指定を行うことができるのは、Visual BasicやVisual C++などの開発環境でMSXML3.dllの提供するタイプライブラリへの参照を行うことができる場合に限られます。

 この表に基づいてノードのタイプを指定することで取得したい内容を指定することができます。

 「obj.nodeType = 3」と記述されているのは、上記の表のようにNODE_TEXTにあたる要素の中身を取得することを指定しています。また、もう1つの条件では、その要素の名称がtitleであるとの指定を行っています。つまり、ドキュメントの操作を行っているとき、アクティブになっている部分が「要素の値」であり、その要素名が「title」であったとき条件に一致するということです。そのため、メッセージボックスには、books配下のtitle要素の値のみが順に示されるようになっているわけです。

 必要とするデータに応じて、このnodeTypeの設定を変更し、条件を設定することで必要とするデータへアクセスできるようになっていることが読み取れると思います。

 このようにすると、ある特定の要素名で示された値を順に取得していくことができます。根幹要素(Root Element)から見て幾つかのデータが存在していて、それぞれの値を取得したいようなケースには、非常に有効な手段であると考えられます。

 しかし、この方法で値の取得を行うと、ある特定の値を取得したいにもかかわらず、木構造を持っているXML文書の全体を操作することになってしまい、大きなドキュメントの中から探し出すような局面において最適な方法とはいえません。

 そこで、今回紹介するのが、XPath式を用いた値の取得方法です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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