03/10 XMLからXPathで指定した階層のテキストを取得する
AppleScriptで真剣にXMLを扱おうとする場合に、揃えておくべきものがいくつかあります。
まずは、対象となるXMLデータを編集するなりブラウズするための「XMLエディタ」。とくに、XML中の場所(パス)を特定する「XPath」を表示する機能は必須です。
XPathの表示機能があるフリーのMac OS X用XMLエディタは、探した範囲では「XMLSpear」1本でした(フリーでなければいくつかありましたが……)。XMLSpearはJavaで作ってあってAppleScriptからコントロールできないものですが、この際文句は言えません。

次に、Satimage SoftwareのXMLLib OSAX。XMLの操作を行うのに、XMLLib OSAXは欠かせません。他の言語処理系で常識的にある機能をAppleScriptに提供するフリーのOSAXです。これを、スクリプトエディタをいったん終了させ、~/Library/ScriptingAdditionsフォルダに入れておきます。→ XMLLib OSAXダウンロードページ
あとはまあ、こんな風にXMLファイルを読み込んでXPathを指定してデータを取り出したりすることになります。もう、XMLLibはMac OS Xに標準搭載してほしいぐらい役立ちまくっています。
下記サンプルは、~/Library/Preferencesにあるcom.apple.applescript.plistファイルを処理させてみたものです(同じファイルを指定して実行してみても、結果は人によって違います)。

ちなみに、XMLLib OSAXはUTF-8のXMLにしか対応していないようなので、風変りなSJISのXML書類などに遭遇してしまった場合には、iconvコマンドなどで変換&XML中のエンコーディング指定部分をUTF-8に置換してから読み込んでみてください。
| スクリプト名:XMLからXPathで指定した階層のテキストを取得する |
| set anXMLfile to choose file set XMLbody to XMLOpen anXMLfile set the_root to XMLRoot XMLbody set aXMLRes to XMLGetText (XMLXPath the_root with “/plist/dict[1]/dict[1]/key“) –> {”Garage Band”, “GifBuilder”, “Image Capture Scripting”, “Image Capture Scripting.app”, “InDesign 2.0.2″, “Script Etitor”} |
