• 締切済み

VBScriptを用いたXMLのデータ抽出に関して

下記のsample.xmlから sample.xml ---------------------------------------------- <?xml version="1.0" encoding="utf-8" ?> <books> <item> <title>XML入門-第1巻</title> <price>2500</price> <isbn>1-1234-5678-X</isbn> <authors> <author>西谷 亮</author> </authors> <imgfile>1-1234-5678-X.gif</imgfile> </item> <item> <title>XML入門-第2巻</title> <price>2200</price> <isbn>1-1234-5678-0</isbn> <authors> <author>西谷 亮</author> <author>山田 太郎</author> </authors> <imgfile>1-1234-5678-0.gif</imgfile> </item> <item> <title>XML入門-第3巻</title> <price>3600</price> <isbn>1-1234-5678-1</isbn> <authors> <author>西谷 亮</author> <author>鈴木 次郎</author> </authors> <imgfile>1-1234-5678-1.gif</imgfile> </item> </books> ---------------------------------------------- 下記のtitle.vbsを用いて、「<title>」タグに表記された 書物のタイトルだけを抜き出します。 title.vbs ---------------------------------------------- 01 : Dim objDOM, rtResult 02 : 03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument") 04 : rtResult = objDOM.load("Sample.xml") 05 : If rtResult = True Then 06 : procDispDatas objDOM.childNodes 07 : End If 08 : Set objDOM = Nothing 09 : 10 : Sub procDispDatas(objNode) 11 : Dim obj 12 : For Each obj In objNode 13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then 14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue 15 : End If 16 : If obj.hasChildNodes Then 17 : procDispDatas obj.childNodes 18 : End If 19 : Next 20 : End Sub ---------------------------------------------- 上記の記述ではサブプロシージャprocDispDatas(objNode) にて、<title>タグの要素の数だけMsgBoxでタイトル名の メッセージボックスが表示されるかと思います。 これをひとつのメッセージでまとめるて表示するはどのように 記述すればよいでしょうか。 下記のメッセージの表示が理想です。 メッセージ ---------------------------------------------- title:XML入門-第1巻 title:XML入門-第2巻 title:XML入門-第3巻 ---------------------------------------------- お手数をおかけしますが、ご存知の方 ご教授いただけませんでしょうか>< よろしくお願いいたします。

みんなの回答

回答No.1

少し、勉強してから質問しませんか!!!! 1行目にタイトルのように「VBScriptを用いたXMLのデータ抽出に関して 」とありますがXMLとは全然関係ないですよね。 VBSの書式と言うか、ループ制御と言うか、制御系の基本操作で、VBSともあまり関係ない、プログラムのロジック的な事柄ですよね。 ループして、そのループ内でコメント出力コマンドで標準出力または、コンフュームとしてGUIで出力 が、元のスクリプトですね。出力をやめ、変数に格納するだけです。プログラミングの初歩の初歩で、テキストの 一丁目一番地 に記載されています。 ループを抜けた後、 MsgBox に格納した変数をオプションとしてつけて、実行すればいいだけのこと。 http://msdn.microsoft.com/ja-jp/library/cc392489.aspx このあたりで、じっくり取り組んでください。 ちなみに変数に格納する時に、セパレーターとして、改行マークを追加すればいいだけのこと。それで、MSGBOXに渡すと、コマンド側が改行マークを解釈し、「第1巻」の下の行に次の文字列が表示される http://msdn.microsoft.com/ja-jp/library/cc392239.aspx http://msdn.microsoft.com/ja-jp/library/cc392241.aspx このへんの定数は、環境によって動作がことなるので、通常「値」を指定する事になる。 Dim mymsg mymsg="" ループ始 mymsg=mymsg obj.parentNode.nodeName & " : " & obj.nodeValue & chr() ループ終了 msgbox mymsg なんてことになる。ちなみに DOM.childNodes とは、XML文のツリー構造へのアクセスとして、階層の配下を探るものなので、当然ループで制御する事になる。 XPathでサーチして、テキストとして表示すれば、ループしなくても表示は可能。それは、今回の事柄が成功したら試してみてください

関連するQ&A