首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apple Health XML to SQL Server

Apple Health XML to SQL Server
EN

Stack Overflow用户
提问于 2020-09-05 19:04:56
回答 1查看 93关注 0票数 0

我想要处理从导出的Apple Health XML文件导入的XML数据。数据存储在一个导入表中,我正在尝试使用sp_xml_preparedocument来准备文档和查询数据。

下面描述的方法适用于XML文件的另一部分,特别是活动摘要。现在我收到以下错误:

代码语言:javascript
复制
Msg 6603, Level 16, State 2, Line 23
XML parsing error: NodeTest expected here.

@-->[<--type]

微软在他们的文档中给出的例子似乎是在不同结构的数据上工作,所以我不确定如何或是否可以使他们的例子适应我的需求。

我尝试过以下几种方法:

代码语言:javascript
复制
DECLARE @XML AS XML;
DECLARE @hDoc AS INT;

SELECT @XML = XMLData FROM [Data].AppleImport;
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

SELECT [type],
       sourceName,
       sourceVersion,
       unit,
       creationDate,
       startDate,
       endDate,
       [value]
FROM OPENXML(@hDoc, 'HealthData/Record')
WITH
(
    [type] NVARCHAR(50) '@[type]',
    sourceName NVARCHAR(50) '@sourceName',
    sourceVersion NVARCHAR(50) '@sourceVersion',
    unit NVARCHAR(50) '@unit',
    creationDate NVARCHAR(50) '@creationDate',
    startDate NVARCHAR(50) '@startDate',
    endDate NVARCHAR(50) '@endDate',
    [value] NVARCHAR(50) '@[value]'
)

EXEC sp_xml_removedocument @hDoc;

XML数据结构(为brewity提取的部分):

代码语言:javascript
复制
<HealthData locale="nb_NO">
    <ExportDate value="2020-09-03 12:10:19 +0200"/>
    <Me HKCharacteristicTypeIdentifierDateOfBirth="1988-01-01" HKCharacteristicTypeIdentifierBiologicalSex="HKBiologicalSexMale" HKCharacteristicTypeIdentifierBloodType="HKBloodTypeNotSet" HKCharacteristicTypeIdentifierFitzpatrickSkinType="HKFitzpatrickSkinTypeNotSet"/>
    <Record type="HKQuantityTypeIdentifierHeight" sourceName="amsten sin iPhone" sourceVersion="13.0" unit="cm" creationDate="2019-09-23 15:19:48 +0200" startDate="2019-09-23 15:19:48 +0200" endDate="2019-09-23 15:19:48 +0200" value="188"/>
    <Record type="HKQuantityTypeIdentifierHeight" sourceName="Helse" sourceVersion="11.4.1" unit="cm" creationDate="2018-07-31 21:42:50 +0200" startDate="2018-07-31 21:42:50 +0200" endDate="2018-07-31 21:42:50 +0200" value="188"/>
    <MetadataEntry key="HKWasUserEntered" value="1"/>
    </Record>
    <Record type="HKQuantityTypeIdentifierHeartRate" sourceName="amsten sin Apple Watch" sourceVersion="5.3.1" device="&lt;&lt;HKDevice: 0x2834d03c0&gt;, name:Apple Watch, manufacturer:Apple Inc., model:Watch, hardware:Watch4,4, software:5.3.1&gt;" unit="count/min" creationDate="2019-09-15 06:38:32 +0200" startDate="2019-09-15 06:30:08 +0200" endDate="2019-09-15 06:30:08 +0200" value="49">
    <MetadataEntry key="HKMetadataKeyHeartRateMotionContext" value="1"/>
    </Record>
</HealthData>

任何关于如何继续进行的意见或好的阅读材料都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 19:15:18

在使用有效的XML时,也可以尝试使用以下OPENXML语句:

代码语言:javascript
复制
SELECT [type],
       sourceName,
       sourceVersion,
       unit,
       creationDate,
       startDate,
       endDate,
       [value]
FROM OPENXML(@hDoc, 'HealthData/Record')
WITH
(
    [type] NVARCHAR(50) '@type',
    sourceName NVARCHAR(50) '@sourceName',
    sourceVersion NVARCHAR(50) '@sourceVersion',
    unit NVARCHAR(50) '@unit',
    creationDate NVARCHAR(50) '@creationDate',
    startDate NVARCHAR(50) '@startDate',
    endDate NVARCHAR(50) '@endDate',
    [value] NVARCHAR(50) '@value'
)

请注意,'@[type]''@[value]'已更改为'@type''@value'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63753209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档