Archive for the 'XMLlib' Category

03/10 XMLからXPathで指定した階層のテキストを取得する

AppleScriptで真剣にXMLを扱おうとする場合に、揃えておくべきものがいくつかあります。

まずは、対象となるXMLデータを編集するなりブラウズするための「XMLエディタ」。とくに、XML中の場所(パス)を特定する「XPath」を表示する機能は必須です。

XPathの表示機能があるフリーのMac OS X用XMLエディタは、探した範囲では「XMLSpear」1本でした(フリーでなければいくつかありましたが……)。XMLSpearはJavaで作ってあってAppleScriptからコントロールできないものですが、この際文句は言えません。

xmlspear01.jpg

次に、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ファイルを処理させてみたものです(同じファイルを指定して実行してみても、結果は人によって違います)。

xml02.jpg

ちなみに、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”}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に