XMLに対して、オープンソースの「XPathQuery4ObjC」を用いてXPathを指定してXML内の要素にアクセスするAppleScriptです。
XMLに対してXpathを指定してアクセスする道具はいろいろあります。
Syetem Eventsを使ってXMLにアクセスする方法、XMLLib OSAX、オープンソースのObjective-CのプログラムをCocoa Framework化したもの、etc。
ただ、macOS 10.14でOSAXが事実上使えなくなったことを考えると、OSAXによるAppleScriptの予約語拡張は得策ではありません。System Eventsも1つの解決策ではありますが、XPathが使えないのでほとんど使いません。
こうしたObjective-Cで記述されたプログラムをAppleScriptから呼び出すのが、現状でもっとも効率のよい解決策です。各プログラムはだいたいにおいて挙動が異なり、XMLの構造も一様ではありません。複数のプログラムをためして、対象のXMLを思い通りに処理できるか、総当たりで確認しています。
AppleScript名:XPathQuery4ObjCのじっけん2 |
— Created 2017-01-05 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "XPathQueryKit" –https://github.com/cybergarage/XPathQuery4ObjC –http://piyocast.com/as/archives/4376 set rssURL to current application’s |NSURL|’s URLWithString:"http://piyocast.com/as/feed" set xpathQuery to current application’s CGXPathQuery’s alloc()’s initWithContentsOfURL:rssURL if ((xpathQuery’s parse()) as boolean) = true then set entriesList to xpathQuery’s objectsForXPath:"/rss/channel/item" repeat with itemObject in entriesList set aChild to itemObject’s children() log aChild set aTitle to (itemObject’s valueForXPath:"title") log aTitle as string set aLink to (itemObject’s valueForXPath:"link") log aLink as string set aComments to (itemObject’s valueForXPath:"comments") log aComments as string set aPubdate to (itemObject’s valueForXPath:"pubDate") log aPubdate as string set aCreator to (itemObject’s valueForXPath:"dc:creator") log aCreator as string set aCategory to (itemObject’s valuesForXPath:"category") log aCategory as list set aGUID to (itemObject’s valuesForXPath:"guid") log aGUID as string set aDesc to (itemObject’s valueForXPath:"description") log aDesc as string set aCommentURL to (itemObject’s valueForXPath:"wfw:commentRss") log aCommentURL as string end repeat end if |
More from my site
(Visited 83 times, 1 visits today)
macOS 10.14 AppleScriptリリースノート – AppleScriptの穴 says:
[…] 「よほどのこと」がなければOSAXを使用していません。XMLからXPathを用いてデータを取得する用途についてはXMLTools OSAXの機能が強力ですが、XPathQuery4ObjCなどの代替手段を用意しています。 […]