20260620

【AppleScript】インテル・アプリ一覧をHTML出力

【AppleScript】インテル・アプリ一覧をHTML出力

NOTE記事一覧ですnote.com
 

【Safari・FireFox用Script Editorで開く】 |

インテルアプリ一覧を出力.scpt.scpt
ソース
001#!/usr/bin/env osascript
002#coding: utf-8
003----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
004(*
005インテルアプリケーションの一覧をHTML出力します
006
007
008
009
010com.cocolog-nifty.quicktimer.icefloe *)
011----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
012use AppleScript version "2.8"
013use framework "Foundation"
014use framework "AppKit"
015use framework "UniformTypeIdentifiers"
016use framework "CoreFoundation"
017use scripting additions
018
019property refMe : a reference to current application
020
021#処理開始時間
022set ocidStart to refMe's CFAbsoluteTimeGetCurrent()
023
024
025#############################
026#保存先
027set appFileManager to refMe's NSFileManager's defaultManager()
028set ocidTempDirURL to appFileManager's temporaryDirectory()
029set ocidUUID to refMe's NSUUID's alloc()'s init()
030set ocidUUIDString to ocidUUID's UUIDString
031set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(true)
032#
033set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s init()
034ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
035set listDone to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:(true) attributes:(ocidAttrDict) |error|:(reference)
036#パス
037set strFileName to "search_result.html" as text
038set ocidSaveFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(strFileName) isDirectory:false
039
040
041#############################
042#コマンドJSON
043set strCmd to ("/usr/sbin/system_profiler SPApplicationsDataType -xml > \"~/Desktop/SPApplicationsDataType.plist\"") as text
044set strCmd to ("/usr/sbin/system_profiler SPApplicationsDataType -json") as text
045set strStdOut to (do shell script strCmd) as text
046
047set ocidStdOutString to refMe's NSMutableString's stringWithString:(strStdOut)
048set ocidReplacedStrings to (ocidStdOutString's stringByReplacingOccurrencesOfString:(return & linefeed) withString:(linefeed))
049set ocidReplacedStrings to (ocidReplacedStrings's stringByReplacingOccurrencesOfString:(return) withString:(linefeed))
050set ocidReplacedStrings to (ocidReplacedStrings's stringByReplacingOccurrencesOfString:(linefeed & linefeed) withString:(linefeed))
051set ocidReplacedStrings to (ocidReplacedStrings's stringByReplacingOccurrencesOfString:(tab) withString:(""))
052#NSDATA
053set ocidJsonData to ocidReplacedStrings's dataUsingEncoding:(refMe's NSUTF8StringEncoding)
054#JSON ルートがDICT
055set ocidOption to (refMe's NSJSONReadingJSON5Allowed)
056set listResponse to (refMe's NSJSONSerialization's JSONObjectWithData:(ocidJsonData) options:(ocidOption) |error|:(reference))
057if (item 2 of listResponse) = (missing value) then
058   log "JSONObjectWithData 正常処理"
059   set ocidApplicationsArray to (first item of listResponse)'s objectForKey:("SPApplicationsDataType")
060else if (item 2 of listResponse) ≠ (missing value) then
061   set strErrorNO to (item 2 of listResponse)'s code() as text
062   set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
063   refMe's NSLog("■:" & strErrorNO & strErrorMes)
064   return "JSONObjectWithData エラーしました" & strErrorNO & strErrorMes
065end if
066set appPredicate to refMe's NSPredicate's predicateWithFormat_("arch_kind == %@", "arch_i64")
067set ocidFilterdArray to ocidApplicationsArray's filteredArrayUsingPredicate:(appPredicate)
068#############################
069#
070set strTitleText to ("【system_profiler】: インテルアプリ一覧") as text
071#headerに渡すエレメント
072set ocidSetHeaderElement to (refMe's NSXMLElement's elementWithName:("div"))
073set ocidH3Element to (refMe's NSXMLElement's elementWithName:("h3"))
074(ocidH3Element's setStringValue:(strTitleText))
075(ocidSetHeaderElement's addChild:(ocidH3Element))
076#footerに渡すエレメント
077set ocidSetFooterElement to (refMe's NSXMLElement's elementWithName:("div"))
078set ocidAElement to (refMe's NSXMLElement's elementWithName:("a"))
079set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("href") stringValue:("https://note.com/search?context=note&q=from%3A%40quicktimer%20&sort=new"))
080(ocidAElement's addAttribute:(ocidAddNode))
081set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("target") stringValue:("_blank"))
082(ocidAElement's addAttribute:(ocidAddNode))
083set strContents to ("AppleScriptで生成しました") as text
084(ocidAElement's setStringValue:(strContents))
085(ocidSetFooterElement's addChild:(ocidAElement))
086#articleに渡すエレメント
087set ocidSetArticleElement to (refMe's NSXMLElement's elementWithName:("div"))
088set ocidH5Element to (refMe's NSXMLElement's elementWithName:("h5"))
089(ocidH5Element's setStringValue:("インテルアプリ一覧:2027秋リリースのmacOS28で起動出来なくなります"))
090(ocidSetArticleElement's addChild:(ocidH5Element))
091########################
092#テーブル部生成開始
093set ocidTableElement to (refMe's NSXMLElement's elementWithName:("table"))
094#【caption】
095set ocidCaptionElement to (refMe's NSXMLElement's elementWithName:("caption"))
096set strCaptionText to ("インテル・バイナリーのアプリケーション一覧") as text
097(ocidCaptionElement's setStringValue:(strCaptionText))
098(ocidTableElement's addChild:(ocidCaptionElement))
099#【thead】
100set ocidTheadElement to (refMe's NSXMLElement's elementWithName:("thead"))
101set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr"))
102#項目番号
103set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
104(ocidAddElement's setStringValue:("\"))
105(ocidTrElement's addChild:(ocidAddElement))
106#キー
107set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
108(ocidAddElement's setStringValue:("NAME"))
109(ocidTrElement's addChild:(ocidAddElement))
110#キー
111set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
112(ocidAddElement's setStringValue:("LINK"))
113(ocidTrElement's addChild:(ocidAddElement))
114#キー
115set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
116(ocidAddElement's setStringValue:("PATH"))
117(ocidTrElement's addChild:(ocidAddElement))
118#TRをTHEADにセット
119(ocidTheadElement's addChild:(ocidTrElement))
120#THEADをテーブルにセット
121(ocidTableElement's addChild:(ocidTheadElement))
122
123########################
124
125#
126set ocidPathArrayM to refMe's NSMutableArray's alloc()'s init()
127#
128set numTotalLine to 0 as integer
129set numCntMachArray to ocidFilterdArray's |count|()
130#【tbody】
131set ocidTbodyElement to (refMe's NSXMLElement's elementWithName:("tbody"))
132#繰り返し
133repeat with numItemNo from 1 to numCntMachArray by 1
134   
135   
136   
137   set ocidItemDict to (ocidFilterdArray's objectAtIndex:(numItemNo - 1))
138   set ocidName to (ocidItemDict's objectForKey:("_name"))
139   set ocidPath to (ocidItemDict's objectForKey:("path"))
140   set ocidCharSet to refMe's NSCharacterSet's URLPathAllowedCharacterSet()
141   set ocidEncString to (ocidPath's stringByAddingPercentEncodingWithAllowedCharacters:(ocidCharSet))
142   #
143   (ocidPathArrayM's addObject:(ocidPath))
144   #TRの開始
145   set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr"))
146   #項番処理
147   set ocidThElement to (refMe's NSXMLElement's elementWithName:("th"))
148   (ocidThElement's setStringValue:(numItemNo as text))
149   (ocidTrElement's addChild:(ocidThElement))
150   
151   
152   #リンク
153   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
154   (ocidTdElement's setStringValue:(ocidName))
155   (ocidTrElement's addChild:(ocidTdElement))
156   #リンク
157   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
158   set ocidAElement to (refMe's NSXMLElement's elementWithName:("a"))
159   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("href") stringValue:(ocidEncString))
160   (ocidAElement's addAttribute:(ocidAddNode))
161   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("target") stringValue:("_blank"))
162   (ocidAElement's addAttribute:(ocidAddNode))
163   (ocidAElement's setStringValue:(ocidPath))
164   (ocidTdElement's addChild:(ocidAElement))
165   (ocidTrElement's addChild:(ocidTdElement))
166   #パス
167   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
168   set ocidINPUTElement to (refMe's NSXMLElement's elementWithName:("input"))
169   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("type") stringValue:("text"))
170   (ocidINPUTElement's addAttribute:(ocidAddNode))
171   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("readonly") stringValue:("true"))
172   (ocidINPUTElement's addAttribute:(ocidAddNode))
173   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("onclick") stringValue:("this.select();"))
174   (ocidINPUTElement's addAttribute:(ocidAddNode))
175   
176   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("value") stringValue:(ocidPath))
177   (ocidINPUTElement's addAttribute:(ocidAddNode))
178   (ocidTdElement's addChild:(ocidINPUTElement))
179   
180   (ocidTrElement's addChild:(ocidTdElement))
181   (ocidTbodyElement's addChild:(ocidTrElement))
182end repeat
183#TBODYをテーブルにセット
184(ocidTableElement's addChild:(ocidTbodyElement))
185#【tfoot】 TRで
186set ocidTfootElement to (refMe's NSXMLElement's elementWithName:("tfoot"))
187set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr"))
188#colspan指定して1行でセット
189set ocidThElement to (refMe's NSXMLElement's elementWithName:("th"))
190set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("colspan") stringValue:(4))
191(ocidThElement's addAttribute:(ocidAddNode))
192
193#
194set strContents to (" 項目数 : " & (numCntMachArray as text)) as text
195(ocidThElement's setStringValue:(strContents))
196#THをTRにセットして
197(ocidTrElement's addChild:(ocidThElement))
198#TRをTFOOTにセット
199(ocidTfootElement's addChild:(ocidTrElement))
200#TFOOTをテーブルにセット
201(ocidTableElement's addChild:(ocidTfootElement))
202#テーブルをアーティクルにセット
203(ocidSetArticleElement's addChild:(ocidTableElement))
204#<HR>
205set ocidHRElement to (refMe's NSXMLElement's elementWithName:("hr"))
206(ocidSetArticleElement's addChild:(ocidHRElement))
207set ocidTextareaElement to (refMe's NSXMLElement's elementWithName:("textarea"))
208set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("readonly") stringValue:("true"))
209(ocidTextareaElement's addAttribute:(ocidAddNode))
210
211set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("style") stringValue:("width: 80%;height: 360px;resize: none;box-sizing: border-box;"))
212(ocidTextareaElement's addAttribute:(ocidAddNode))
213
214
215set ocidJoinText to ocidPathArrayM's componentsJoinedByString:(linefeed)
216
217(ocidTextareaElement's setStringValue:(ocidJoinText))
218(ocidSetArticleElement's addChild:(ocidTextareaElement))
219
220##############################
221#HTMLにする
222set ocidHTML to doMakeRootElement({ocidSetHeaderElement, ocidSetArticleElement, ocidSetFooterElement, strTitleText})
223##############################
224#保存
225
226#読み取りやすい表示
227set ocidXMLdata to (ocidHTML's XMLDataWithOptions:(refMe's NSXMLNodePrettyPrint))
228#保存
229set listDone to (ocidXMLdata's writeToURL:(ocidSaveFilePathURL) options:(refMe's NSDataWritingAtomic) |error|:(reference))
230set aliasFilePath to (ocidSaveFilePathURL's absoluteURL()) as alias
231
232
233
234#処理終了時間
235set ocidEnd to refMe's CFAbsoluteTimeGetCurrent()
236set strTime to (ocidEnd - ocidStart) as text
237
238
239
240
241##############################
242set strDefaultAnswer to ocidJoinText as text
243
244##############################
245#   ダイアログ
246set strIconFilePath to ("/System/Library/UserNotifications/Bundles/com.apple.identityservicesd.firewall.bundle/Contents/Resources/Apple Care_Mac.icns") as text
247set aliasIconFilePath to (POSIX file strIconFilePath) as alias
248set strMsg to ("テキストの戻り値です" & return & "コピーできます") as text
249set strTitle to ("処理の戻り値です") as text
250set strOK to ("ファイルに保存する") as text
251set strCancel to ("キャンセル") as text
252set strOpenHTML to ("ブラウザで表示") as text
253set listBotton to {strOpenHTML, strCancel, strOK} as list
254try
255   tell application "System Events"
256      activate
257      set recordResult to (display dialog strMsg with title strTitle default answer strDefaultAnswer buttons listBotton default button strOpenHTML cancel button strCancel with icon aliasIconFilePath giving up after 20 without hidden answer) as record
258   end tell
259on error strErrMsg number numErrNo
260   log strErrMsg & numErrNo
261   return false
262end try
263
264set strResponseButton to (button returned of recordResult) as text
265set boolGaveUp to (gave up of recordResult) as boolean
266if boolGaveUp is true then
267   log "時間切れ"
268   return false
269end if
270set strResponseText to (text returned of recordResult) as text
271if strResponseButton is strOK then
272   set appFileManager to refMe's NSFileManager's defaultManager()
273   set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
274   set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
275   set aliasDesktopDirPath to (ocidDesktopDirPathURL's absoluteURL()) as alias
276   set strIconFilePath to ("/System/Library/UserNotifications/Bundles/com.apple.identityservicesd.firewall.bundle/Contents/Resources/Apple Care_Mac.icns") as text
277   set aliasIconFilePath to (POSIX file strIconFilePath) as alias
278   #
279   set strBaseFileName to ("インテルアプリ一覧") as text
280   set strSaveExtension to ("txt") as text
281   set strDefaultFileName to ("" & strBaseFileName & "." & strSaveExtension & "") as text
282   set strMsg to ("名前を決めてください" & return & "拡張子は" & strSaveExtension & "です") as text
283   set strPromptText to "名前を決めてください" as text
284   #ファイル名 ダイアログ
285   tell application "SystemUIServer"
286      activate
287      set aliasSaveFilePath to (choose file name strMsg default location aliasDesktopDirPath default name strDefaultFileName with prompt strPromptText) as «class furl»
288   end tell
289   #出力パス
290   set strSaveFilePath to (POSIX path of aliasSaveFilePath) as text
291   set ocidSaveFilePathStr to refMe's NSString's stringWithString:(strSaveFilePath)
292   set ocidSaveFilePath to ocidSaveFilePathStr's stringByStandardizingPath()
293   set ocidSaveFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidSaveFilePath) isDirectory:false)
294   set ocidContainerDirPathURL to ocidSaveFilePathURL's URLByDeletingLastPathComponent()
295   #拡張子
296   set strExtension to (ocidSaveFilePathURL's pathExtension()) as text
297   #最後のアイテムがファイル名
298   set strFileName to (ocidSaveFilePathURL's lastPathComponent()) as text
299   #拡張子のつけ忘れ対策
300   if strFileName does not contain strSaveExtension then
301      set strFileName to (strFileName & "." & strSaveExtension) as text
302      set ocidSaveFilePathURL to ocidContainerDirPathURL's URLByAppendingPathComponent:(strFileName)
303   end if
304   #保存処理
305   set ocidSaveString to refMe's NSMutableString's stringWithString:(strResponseText)
306   set ocidSaveString to (ocidSaveString's stringByReplacingOccurrencesOfString:(return & linefeed) withString:(linefeed))
307   set ocidSaveString to (ocidSaveString's stringByReplacingOccurrencesOfString:(return) withString:(linefeed))
308   set ocidSaveString to (ocidSaveString's stringByReplacingOccurrencesOfString:(linefeed & linefeed) withString:(linefeed))
309   set listDone to ocidSaveString's writeToURL:(ocidSaveFilePathURL) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error|:(reference)
310   return (first item of listDone)
311else if strResponseButton is strOpenHTML then
312   
313   
314   ##############################
315   #【6】ブラウザで開く
316   
317   set strAppPath to ("/Applications/Safari.app") as text
318   set ocidAppPathStr to (refMe's NSString's stringWithString:(strAppPath))
319   set ocidAppPath to ocidAppPathStr's stringByStandardizingPath()
320   set ocidAppPathURL to (refMe's NSURL's fileURLWithPath:(ocidAppPath) isDirectory:(false))
321   set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
322   set ocidConfig to refMe's NSWorkspaceOpenConfiguration's configuration
323   (ocidConfig's setActivates:(refMe's NSNumber's numberWithBool:true))
324   (ocidConfig's setHides:(refMe's NSNumber's numberWithBool:false))
325   ##
326   set ocidOpenURLsArray to refMe's NSMutableArray's alloc()'s init()
327   (ocidOpenURLsArray's addObject:(ocidSaveFilePathURL))
328   ##
329   (appSharedWorkspace's openURLs:(ocidOpenURLsArray) withApplicationAtURL:(ocidAppPathURL) configuration:(ocidConfig) completionHandler:(missing value))
330   
331end if
332
333
334return ("処理時間:" & strTime) as text
335
336
337
338
339
340############################################################
341# 基本的なHTMLの構造
342(*
343doMakeRootElement({argHeaderContents, argArticleContents, argFooterContents,argTitleText})
344HTMLのBODY部
345header
346article
347footerにそれぞれAddchildするデータをリストで渡す
348戻り値はRootエレメントにセットされた
349NSXMLDocumentを戻すので 保存すればOK
350*)
351############################################################
352to doMakeRootElement({argHeaderContents, argArticleContents, argFooterContents, argTitleText})
353   #XML初期化
354   set ocidXMLDoc to refMe's NSXMLDocument's alloc()'s init()
355   ocidXMLDoc's setDocumentContentKind:(refMe's NSXMLDocumentHTMLKind)
356   # DTD付与
357   set ocidDTD to refMe's NSXMLDTD's alloc()'s init()
358   ocidDTD's setName:("html")
359   ocidXMLDoc's setDTD:(ocidDTD)
360   #
361   set ocidRootElement to refMe's NSXMLElement's elementWithName:("html")
362   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("lang") stringValue:("ja")
363   ocidRootElement's addAttribute:(ocidAddNode)
364   #
365   set ocidHeadElement to refMe's NSXMLElement's elementWithName:("head")
366   #
367   set ocidAddElement to refMe's NSXMLElement's elementWithName:("title")
368   ocidAddElement's setStringValue:(argTitleText)
369   ocidHeadElement's addChild:(ocidAddElement)
370   # http-equiv
371   set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta")
372   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Type")
373   ocidAddElement's addAttribute:(ocidAddNode)
374   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/html; charset=UTF-8")
375   ocidAddElement's addAttribute:(ocidAddNode)
376   ocidHeadElement's addChild:(ocidAddElement)
377   #
378   set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta")
379   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Style-Type")
380   ocidAddElement's addAttribute:(ocidAddNode)
381   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/css")
382   ocidAddElement's addAttribute:(ocidAddNode)
383   ocidHeadElement's addChild:(ocidAddElement)
384   #
385   set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta")
386   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Script-Type")
387   ocidAddElement's addAttribute:(ocidAddNode)
388   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/javascript")
389   ocidAddElement's addAttribute:(ocidAddNode)
390   ocidHeadElement's addChild:(ocidAddElement)
391   #
392   set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta")
393   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("name") stringValue:("viewport")
394   ocidAddElement's addAttribute:(ocidAddNode)
395   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=90%")
396   ocidAddElement's addAttribute:(ocidAddNode)
397   ocidHeadElement's addChild:(ocidAddElement)
398   #
399   set ocidAddElement to refMe's NSXMLElement's elementWithName:("style")
400   ocidAddElement's setStringValue:("body { margin: 10px; background-color: #FFFFFF; } table { border-spacing: 0; caption-side: top; font-family: system-ui; } thead th { border: solid 1px #666666; padding: .5ch 1ch; border-block-width: 1px 0; border-inline-width: 1px 0; &:first-of-type { border-start-start-radius: .5em } &:last-of-type { border-start-end-radius: .5em; border-inline-end-width: 1px } }tbody input {max-width: 400px;} tbody td { word-wrap: break-word;max-width: 400px;border-spacing: 0; border: solid 1px #666666; padding: .5ch 1ch; border-block-width: 1px 0; border-inline-width: 1px 0; &:last-of-type { border-inline-end-width: 1px } } tbody th { border-spacing: 0; border: solid 1px #666666; padding: .5ch 1ch; border-block-width: 1px 0; border-inline-width: 1px 0; } tbody tr:nth-of-type(odd) { background: #F2F2F2; } .kind_string { font-size: 0.75em; } .date_string { font-size: 0.5em; } .tbody_th_title{text-align: left;} tfoot th { border: solid 1px #666666; padding: .5ch 1ch; &:first-of-type { border-end-start-radius: .5em } &:last-of-type { border-end-end-radius: .5em; border-inline-end-width: 1px } }")
401   ocidHeadElement's addChild:(ocidAddElement)
402   ocidRootElement's addChild:(ocidHeadElement)
403   #   
404   #ボディエレメント
405   set ocidBodyElement to refMe's NSXMLElement's elementWithName:("body")
406   #ヘッダー
407   set ocidHeaderElement to refMe's NSXMLElement's elementWithName:("header")
408   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("header")
409   ocidHeaderElement's addAttribute:(ocidAddNode)
410   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_header")
411   ocidHeaderElement's addAttribute:(ocidAddNode)
412   ocidHeaderElement's addChild:(argHeaderContents)
413   ocidBodyElement's addChild:(ocidHeaderElement)
414   #アーティクル
415   set ocidArticleElement to refMe's NSXMLElement's elementWithName:("article")
416   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("article")
417   ocidArticleElement's addAttribute:(ocidAddNode)
418   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_article")
419   ocidArticleElement's addAttribute:(ocidAddNode)
420   ocidArticleElement's addChild:(argArticleContents)
421   ocidBodyElement's addChild:(ocidArticleElement)
422   #フッター
423   set ocidFooterElement to refMe's NSXMLElement's elementWithName:("footer")
424   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("footer")
425   ocidFooterElement's addAttribute:(ocidAddNode)
426   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_footer")
427   ocidFooterElement's addAttribute:(ocidAddNode)
428   ocidFooterElement's addChild:(argFooterContents)
429   ocidBodyElement's addChild:(ocidFooterElement)
430   #ボディをROOTエレメントにセット
431   ocidRootElement's addChild:(ocidBodyElement)
432   #ROOTをXMLにセット
433   ocidXMLDoc's setRootElement:(ocidRootElement)
434   #値を戻す
435   return ocidXMLDoc
436end doMakeRootElement
437
AppleScriptで生成しました