WSHとは、Windows Scripting Hostの略で、Windows上でのマクロ機能を実現するためのスクリプトです。
MS-DOSのバッチファイルの強化版としても使えます。
WSHの言語には、JScript(JavaScript)か、VBScriptが使えます。
拡張子を*.jsや*.vbsとすれば、クリックするだけで実行できます。
WSHは、コマンドプロンプトから、「wscript ファイル名」でも実行できます。
また、「cscript ファイル名」で実行することで、標準出力にも出力できます。
WSHは、Windows2000やWindows98では、デフォルトで組み込まれています。
また、Windows95やWindowsNTでも、Microsoft社から無料で提供されるモジュールをインストールすれば、使えるようになります。
当然かもしれませんが、Machintoshでは、使えません。
http://www.microsoft.com/japan/developer/scripting/ Microsoft Scripting Technologies(Microsoft社のページ) |
以下に、WSHを使ったDOMプログラミングのサンプルを示します。 これらのスクリプトはXMLデータとともに、ダウンロードしてから実行してください。
Vscript(JavaScript)を使って、住所録のデータを一人づつポップアップウィンドウに表示してみます。
| addr.js |
|---|
var objXML, fileXML;
var nodes, node, items, item, mesg
fileXML = 'addr.xml';
objXML = WScript.CreateObject('MSXML.DOMDocument');
objXML.load(fileXML);
nodes = objXML.getElementsByTagName('個人情報');
for (i = 0; i < nodes.length; i++) {
node = nodes[i];
mesg = '';
items = node.childNodes;
for (j = 0; j < items.length; j++) {
item = items[j];
if (mesg != '') {
mesg = mesg + ', ';
}
mesg = mesg + item.nodeName + ':' + item.firstChild.nodeValue;
}
WScript.Echo(mesg);
}
|
まず、WScript.CreateObject命令で、XML用のobjXMLオブジェクトを生成します。
XMLオブジェクトを生成したら、loadメソッドで、xmlファイルを読み込みます。
getElementsByTagNameメソッドで、XMLデータ内の「個人情報」タグを配列(nodes)に取り出し、順に表示します。
各個人情報は、childNodesメソッドで、要素の一覧を取り出し、nodeNameで、名前や住所などの要素名を表示し、firstChild.nodeValueで、要素の内容を表示しています。
これは、各要素の子に「#text」タグしかないことを前提に、記述しています。
textメソッドを使うと、より簡単に取り出せますが、Microsoft社の独自拡張メソッドですので、移植性に欠けます。
画面へのポップアップ表示は、WScript.Echoメソッドを使って表示します。
各要素の内容をCSV形式にして表示しています。
addr.jsとaddr.xmlを同一ディレクトリに格納して、addr.jsを実行してください。
VBscriptを使って、住所録のデータを一人づつポップアップウィンドウに表示してみます。 上のJScriptを移植したもので、全く同じ動作をします。
| addr.vbs |
|---|
Dim objXML, fileXML
Dim node, item, mesg
fileXML = "addr.xml"
Set objXML = WScript.CreateObject("MSXML.DOMDocument")
objXML.load(fileXML)
For Each node In objXML.getElementsByTagName("個人情報")
mesg = ""
id = node.getAttribute("ID")
For Each item In node.childNodes
If mesg <> "" Then
mesg = mesg & ", "
End If
mesg = mesg & item.nodeName & ":" & item.firstChild.nodeValue
Next
WScript.Echo mesg
Next
|
プログラムの構造は、JScript版と全く同じです。
VBScript版では、配列データをFor Each命令で、変数に取り出し、順に表示している点が異なります。
addr.vbsとaddr.xmlを同一ディレクトリに格納して、addr.vbsを実行してください。
上のサンプルスクリプトで使っている、住所録のXMLデータです。
2つのスクリプトで、XMLデータは共通です。
文字コードは、Unicodeではなく、Shift_JISで使ってください。
| addr.xml |
|---|
<?xml version="1.0" encoding="Shift_JIS" ?> <住所録> <個人情報 ID="1"> <名前>升村 丞</名前> <郵便番号>920-0967</郵便番号> <住所>金沢市菊川1-9-6</住所> <電話番号>076-261-4921</電話番号> </個人情報> <個人情報 ID="2"> <名前>北陸 太郎</名前> <郵便番号>920-0000</郵便番号> <住所>金沢市大手町1-1-1</住所> <電話番号>076-111-3333</電話番号> </個人情報> <個人情報 ID="3"> <名前>金沢 花子</名前> <郵便番号>920-0123</郵便番号> <住所>金沢市片町1-2-3</住所> <電話番号>076-123-4567</電話番号> </個人情報> </住所録> |