iPhoneのヘルスケアから取り出したXML形式データをスプレッドシートのデータに変換する方法

Sleep Cycleというアプリを使って、目覚ましを兼ねて睡眠状態の記録を録っています。

データはiOS標準のヘルスケア管理となり、ヘルスケアアプリから参照できています。

このデータをMacへ取り出して利用するため、現在はQSAceessというアプリを使ってCSV形式のファイルをiCloudドライブへ保存するという経路で取り出しています。


最近になって、ヘルスケアアプリ自体に「ヘルスケアデータを書き出す」という機能があり、iPhone内のヘルスケアデータ全部をiCloudドライブ経由でMacへ取り出せることを知りました。

ただ、ファイル形式がCSVではなくXMLで、これをどうやってMac上のスプレッドシートアプリで開くことが可能な形式に変換するかがわからないでいます。

(さらにいうと、このXML形式のファイルの中に実際にどういうデータが入っているのかがわかっていないので、そもそも所望の数値が取り出せているのか否かさえ確認できていません)


このXML形式のファイルに入っているはずのヘルスケアデータを自在に取り出す方法を自分なりに確立したいと思っています。

簡単に変換ができるようなMac上のツールはないでしょうか。

とりあえずは、CSV形式に変換できさえすれば十分です。(その先はスプレッドシートアプリに読み込んで加工すればいいので)

MacBook, macOS Sierra (10.12.1), Late 2009

投稿日 2016/11/12 15:32

返信
返信: 11

2017/10/21 05:43 Aki への返信

失礼致します。


AppleScriptでも、System EventsのXML Suiteにあるクラスを使うことで、xmlファイルを扱うことができます。

 → Working with XML


しかしながら、これでヘルスケアのデータにアクセスするとエラー(タイムアウト)になってしまうので、AppleScriptObj-CでXPath Queryを使うことでSleep Cycleのエレメントを抽出できました。 以下のステートメンツでは、抽出したエレメンツをデスクトップに書き出します。 


use AppleScript version "2.7"

use framework "Foundation"

use scripting additions


set thePath to POSIX path of (choose file)

set theQuery to "//Record[@sourceName='Sleep Cycle']"

set outputXML to (its extractFrom:thePathmatchingXPath:theQuery)


set aFilePath to (POSIX path of (path to desktop folder)) & "outputXML.xml"

set theString to current application'sNSString'sstringWithString:outputXML

set theResult to theString'swriteToFile:aFilePathatomically:trueencoding: (current application'sNSUTF8StringEncoding) |error|: (missing value)


on extractFrom:thePathmatchingXPath:theQuery

set aURL to current application'sclass "NSURL"'s fileURLWithPath:thePath-- make NSURL

set theXMLDoc to current application'sNSXMLDocument'salloc()'s initWithContentsOfURL:aURLoptions: (|error|: (missing value) -- make XMLDoc

set theXMLOutput to current application'sNSXMLElement'salloc()'s initWithName:"output" -- found nodes added to this

set {theResults, theError} to (theXMLDoc'snodesForXPath:theQuery|error|: (reference)) -- query

if theResults is missing value then error (theError'slocalizedDescription()) as text

repeat with i from 1 to count of theResults

set aNode to itemi of theResults


aNode'sdetach() -- need to detach first

(theXMLOutput'saddChild:aNode) -- add node

end repeat

return (theXMLOutput'sXMLStringWithOptions: (current application'sNSXMLNodePrettyPrint)) as text

end extractFrom:matchingXPath:

参照URL:https://macosxautomation.com/applescript/apps/everyday_book.html

2017/03/31 21:37 Aki への返信

私も同じ質問です。

Excelでは[XMLテーブルとして開く]オプションで読み込むと表形式で読み込むことができるそうですが、numbersではそもそもxmlファイル自体が読み込めないようですね。


ExcelでXMLファイルを読み込む方法

11:00 2016年10月21日 公開

https://dekiru.net/article/14434/


Microsoft Office online で同様のこと(xmlテーブルとして開く)ができるのか試してみましたが、普通にタグなどがそのまま表示される形式でしか読み込めませんでした。


どなたかMac環境で、表形式(テーブルとして)で読み込めた例がありましたらご教示いただきたいと思います。

2016/11/13 01:24 Aki への返信

Aki による書き込み:



最近になって、ヘルスケアアプリ自体に「ヘルスケアデータを書き出す」という機能があり、iPhone内のヘルスケアデータ全部をiCloudドライブ経由でMacへ取り出せることを知りました。

ただ、ファイル形式がCSVではなくXMLで、これをどうやってMac上のスプレッドシートアプリで開くことが可能な形式に変換するかがわからないでいます。

(さらにいうと、このXML形式のファイルの中に実際にどういうデータが入っているのかがわかっていないので、そもそも所望の数値が取り出せているのか否かさえ確認できていません)


このXML形式のファイルに入っているはずのヘルスケアデータを自在に取り出す方法を自分なりに確立したいと思っています。

簡単に変換ができるようなMac上のツールはないでしょうか。

とりあえずは、CSV形式に変換できさえすれば十分です。(その先はスプレッドシートアプリに読み込んで加工すればいいので)

XML形式は、<要素名 属性= "値">内容</要素名> の集合体であり、

テキストエディット.appで開くことができます。

試しにiPhone のヘルスケアデータ(上がった階段、歩数、ウォーキング + ランニングの距離)を

書き出してみました(メールで送信)。 → "書き出す.zip" が添付される

(1)書き出す.zip を解凍 → apple_health_export フォルダ → export_cda.xml、書き出す.xml

(2)書き出す.xml をテキストエディット.app で開く

一部を抜粋

<HealthData locale="ja_JP">

      :

<Record type="HKQuantityTypeIdentifierDistanceWalkingRunning" sourceName="youfo's iPhone" sourceVersion="10.1.1" device="&lt;&lt;HKDevice: 0x1706846a0&gt;, name:iPhone, manufacturer:Apple, model:iPhone, hardware:iPhone9,1, software:10.1.1&gt;" unit="km" creationDate="2016-11-13 17:07:54 +0900" startDate="2016-11-13 16:11:23 +0900" endDate="2016-11-13 16:17:23 +0900" value="0.00352"/>

      :

</HealthData>

これは「ウォーキング + ランニングの距離」のデータで、iPhone上では「3.5m  11月13日 16:17」と

表示されています。

なので、要素名や内容(上記では、DistanceWalkingRunning)をキーにして変換することが可能です。

                                           from youfo

2016/11/13 03:59 youfo への返信

youfo さんによる書き込み:


なので、要素名や内容(上記では、DistanceWalkingRunning)をキーにして変換することが可能です。

                                           from youfo

できるのは良いのですが、面倒くさいですね。何か他に簡単な方法はないでしょうか。

2016/11/13 03:59 Aki への返信

Aki による書き込み:


最近になって、ヘルスケアアプリ自体に「ヘルスケアデータを書き出す」という機能があり、iPhone内のヘルスケアデータ全部をiCloudドライブ経由でMacへ取り出せることを知りました。

ただ、ファイル形式がCSVではなくXMLで、これをどうやってMac上のスプレッドシートアプリで開くことが可能な形式に変換するかがわからないでいます。

Googleにて検索したところ、Excel はXML形式のファイルをインポートできるみたいです。

→Numbers ではできない模様


                                     from youfo

2016/11/13 04:53 youfo への返信

ご回答ありがとうございます。

が、こちらの説明が拙くて、質問の意図がうまく伝わっていなかったようです。


XML形式のファイル、すなわちXMLで記述(マークアップ)されたファイルが、普通のテキストファイルであって、テキストファイルが開けるアプリなら何を使っても『開くだけ』ならできる、というのは重々承知しております。

普通のテキストファイルですから、人間の目で見れば、何が記述されているかはわかる、ということも。


質問の意図としては、XMLで記述された『項目(入眠時刻や覚醒時刻)と日付と実際の数値のセット』をスプレッドシートアプリで扱えるような表の形に変換することはできないか、ということをお訊きしたかったのでした。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

iPhoneのヘルスケアから取り出したXML形式データをスプレッドシートのデータに変換する方法

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。