本ブログの更新は停止しています。更新は新しいサイトの Travellers Tales で行なっています。
AppleScript で XML を parse するAppleScript で XML
を取り扱いたい場合、XML TOOL
という OSAX
がちゃんと存在するようなのですが、そこまで本格的じゃなくていい、という場合のために、簡単なコードを書きました。
元々、自作のツール
PingTrackback
のために書いたものです
(Ver. 1.0 には未実装)。Yuta
さんの AppleScript
Tips
を参考にしています。
tmpData には、解析したいデータを渡します。keyStr には、取り出したいキーを書きます。あるサーバから返ってきた XML の中の <error> </error> というキーで囲まれた値を取り出すには、 simpleTagParse(serverResponse, "error") という具合に使います。 error というキーがなかった場合は、 missing value を返します。また、同じキーが2つ以上ある場合は、最初の1つ目しか返しません。XML 中で、親のキーが違うけれど、子のキーが同じ名前で重なっている場合、まず、親のキーで値を取り出してやって、その結果からさらに目的のキーで値を抽出すればよいです。例えば以下のようなものを想定してます。 <response> <string>ABC</string> </response> <message> <string>XYZ</string> </message> <message> </message> に挟まれた string の値を取り出したい場合、以下のようになります。 set temChildData to simpleTagParse(tmpData, "message") set stringOfMessage to simpleTagParse(tmpChildData, "string") simpleTagParse(tmpData, keyStr) の具体的なコードは以下の通りです。 on simpleTagParse(tmpData, keyStr) set beginKey to "<" & keyStr & ">" as Unicode text
set endKey to "</" & keyStr & ">" as Unicode text
set oldDelim to AppleScript's text item delimiters
try
set AppleScript's text item delimiters to beginKey
set tmpData2 to second text item of tmpData
set AppleScript's text item delimiters to endKey
set tmpData3 to (first text item of tmpData2) as Unicode text
set AppleScript's text item delimiters to oldDelim
return tmpData3
on error
if tmpData does not contain keyStr then
log "The key doesn't exist in the data"
end if
set AppleScript's text item delimiters to oldDelim
return missing value
end try
end simpleTagParse
Posted: 火 - 6月 15, 2004 at 02:44 AM |
Quick Links
Categories
Google Search
Donation
Track Word
Ranking Navi
track feed
Archives
About This Blog
親サイトの Travellers Inn は旅に関するサイトですが、ここ Travellers Tale では、旅にこだわらず興味のおもむいたことについて書いています。ちなみに Travellers Tale という言葉は、旅行記ではなく、旅人の見てきたようなほら話のことを意味しています。
筆者ハンドル:Hiro (ハンドルネームという言い方は正確には間違いですよ!慣用化しているので、こだわる必要はないかもしれませんが。) Trackback powered by
FeedCount
XML/RSS Feed
Statistics
Total entries in this blog:
Total entries in this category: Published On: 6月 10, 2012 12:55 AM |