Windows TIPS
[Scripting]
  Windows TIPS TOPへ
Windows TIPS全リストへ

WSHからXMLファイルの設定情報を読み込む

解説をスキップして操作方法を読む

山田祥寛
2004/09/11
 
対象OS
Windows 2000
Windows XP
Windows Server 2003
アプリケーションの設定ファイルとして、カンマやタブ区切り形式が採用されるケースは多い。だがこの形式は視認性/拡張性に乏しいという難点がある。
XMLを利用することで、データの中身を人間の目が視認しやすく、かつ、データ・レイアウトの変更にも強い設定ファイルを構築することができる。
 
解説

 WSH(Windows Scripting Hosts)でアプリケーションを構築する場合、リソース、パスなど、ユーザーが頻繁に変更したり、編集したりする可能性がある情報は、設定ファイルとして外部ファイル化しておくとよい。外部ファイル化することで、エンド・ユーザーが不用意にコードを編集しなくても済むし、万が一、設定を誤った場合でも、コード本体まで破損してしまうことを防ぐことができる。

 設定ファイルといっても、その形式はさまざまだ。テキスト・ファイル形式は環境に依存せず、アプリケーションからの操作もしやすいため、簡易なアプリケーションでは好んで採用される。しかし簡易である分、テキスト・ファイルにはさまざまな問題があるのも確かだ。

 まずは、編集の分かりやすさを考えてみよう。管理する項目が2〜3項目ならば簡単だ。だがこれが10項目、20項目と増えていったらどうだろう。何番目のカラムがどの項目を表しているかなどは、一見しただけでは確認しにくくなる。

 また、将来的に項目が拡張された場合はどうだろう。タブ区切りテキストやカンマ区切りテキストを処理する際に、アプリケーションは基本的に列の序列でデータを取得しているはずだ。ところが途中で何かしら項目が追加された場合、追加になった個所以降の序列はすべて変わってしまう。つまり、テキスト・ファイルではデータ・レイアウトの変更が、そのままアプリケーションに影響を与えてしまうことになる。

 以上から、将来的なデータ・レイアウトの変更が頻繁に想定されるような状況、また、データの項目数が多い状況では、テキスト・ファイルの採用はあまり好ましくない。

 そこで登場するのがXML(eXtensible Markup Language)である。XMLに関する詳細は、「XML&SOAフォーラム」を参照いただくとして、ここで注目していただきたいのは、XMLが人間の目にも分かりやすいタグ付けがされており、データの内容が視認しやすいという点、個々のデータにはタグ名を介してアクセスできるのでデータ・レイアウトの変更にも耐性・柔軟性があるという点だ。XMLには(もちろん)さまざまな用途が考えられるが、設定ファイルのフォーマットとして採用されるケースがとみに増えてきたのは、このような理由によるところが大きい。

 本稿では、Windows TIPS「WSHでIEの『お気に入り』一覧を設定する」で利用した設定ファイルをXML形式に置き換え、WSHスクリプトから利用する方法について紹介しよう。XMLファイル読み込みの手法はもちろん、XML形式を利用することの利点もまた、サンプルを通じて理解していただきたい。なお、本稿ではあくまでXMLファイルの読み込みに特化した部分の解説を重点に紹介する。そのほかの細かいロジックについては、先のWindows TIPS記事を参照してほしい。


操作方法

手順1―テキスト・エディタでスクリプトのコードを入力する

 まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してfavorites_xml.wsfというファイルを作成してほしい。ただし引用符(')で始まる行はコードの意味を解説するためのコメント部分なので、省略してもよい。プログラムの処理内容や、XMLファイルの読み込み方法などについては、コメントを参照していただきたい。

※ファイルfavorites_xml.wsf

<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
  <job id="shortcut">
  <?job error="true" debug="true" ?>
  <object id="objFs" progid="Scripting.FileSystemObject" />
  <object id="objXml" progid="Msxml2.DOMDocument" />
  <object id="WshShell" progid="WScript.Shell" />
  <script language="VBScript">
  <![CDATA[
  Const CONFIG="C:\favorites.xml"
  ' 非同期読み込みを無効に設定。非同期読み込みを有効にした場合、
  ' 読み込みが完了する前に次の処理が継続されてしまい、エラーの
  ' 原因ともなるので、注意すること。
  objXml.async=False
  ' 定数CONFIGで指定されたXMLファイルを読み込む
  objXml.Load(CONFIG)
  ' favorites.xmlのルート要素(<favorites>要素)を取得
  Set root=objXml.documentElement
  ' ルート要素配下の子要素群(<site>要素)を取得
  Set sites=root.childNodes
  ' <site>要素群を順番に処理
  For i=0 To sites.Length-1
    Set site=sites.Item(i)
    ' <site>要素から<name>、<url>要素を取得
    Set name=site.getElementsByTagName("name")
    Set url= site.getElementsByTagName("url")
    ' 取得した<name>、<url>要素からショートカットを生成
    ' getElementsByTagNameメソッドは、単一の要素ノードではなく、要素ノード
    ' 「群」を返すので注意すること。
    ' <site>要素配下には、必ず1個ずつの<name>、<url>要素があるはずなので、
    ' Itemプロパティの引数にインデックス0を指定することで、目的の要素が取得できる
    Set objUrl=WshShell.CreateShortcut(objFs.BuildPath (WshShell.SpecialFolders("Favorites"),name.Item(0).Text & ".url"))
    objUrl.TargetPath=url.Item(0).Text
    objUrl.Save
  Next
  WScript.Echo("お気に入りへの設定を完了しました。")
  ]]>
  </script>
  </job>
</package>
  • サンプル・ファイルのダウンロード
    注:サンプルfavorites_xml.wsfを実行するには、上のサンプル・ファイルを右クリックしてfavorites_xml.wsfというファイル名で保存し、さらにC:ドライブのルートにデータ・ファイルをfavorites.xmlというファイル名で保存する)

 WSHの実行ファイルは拡張子「.wsf」(Windows Scripting host File)とする必要がある。ファイル名自体は何でもよいが、ここでは「favorites_xml.wsf」という名前で保存しておこう。

手順2―WSHのコードを実行する

 favorites_xml.wsfを実行するには、エクスプローラなどからfavorites_xml.wsfをダブルクリックするだけでよい。その際、あらかじめ上記のスクリプト中の定数CONFIGで指定された設定ファイル(ここでは「c:\favorites.xml」としている)が実際に存在することを確認しておいてほしい。実行後、お気に入りに指定したサイトへのリンクが作成(追加)されていれば成功だ。

 favorites.xmlの例としては、例えば次のようなものを用意し、これをc:\favorites.xmlとして保存しておく。ルート要素<favorites>の配下に、個々のお気に入り情報を表す<site>要素を複数個含むことができる。個々の<site>要素には、現在、サイト名(<name>要素)とリンク先のURL(<url>要素)とを含むものとする。

※ファイルfavorites.xml

<?xml version="1.0" encoding="UTF-8" ?>
<favorites>
  <site>
    <name>サーバサイド技術の学び舎 - WINGS</name>
    <url>http://www.wings.msn.to</url>
  </site>
  <site>
    <name>サーバサイド環境構築設定</name>
    <url>http://www.wings.msn.to/redirect.php/-/B-08/</url>
  </site>
  <site>
    <name>Q&A掲示板</name>
    <url>http://www.wings.msn.to/redirect.php/-/B-07/</url>
  </site>
</favorites>

 なお、この例では、<site>要素の配下にあるのは<name>と<url>要素だけであるが、今後新たな要素として、例えばサイトを説明するための<description>要素が追加されたとしても、元のコードには影響が出ない点に注目してほしい。繰り返すが、この拡張性がXMLフォーマットの魅力の1つである。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間