Вы не предоставили свой XML-файл ... Но я нашел один sample of a TCX-file here и another one here. Чтение этого не требует схемы. Я надеюсь, что вы можете решить ваши проблемы, когда вы видите следующий пример:
DECLARE @xml XML=
N'<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<Activities>
<Activity Sport="Running">
<Id>2015-01-25T12:14:34Z</Id>
<Lap StartTime="2015-01-25T12:14:34Z">
<TotalTimeSeconds>507.0989990</TotalTimeSeconds>
<DistanceMeters>1000.0000000</DistanceMeters>
<MaximumSpeed>2.5790000</MaximumSpeed>
<Calories>95</Calories>
<AverageHeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
<Value>155</Value>
</AverageHeartRateBpm>
<MaximumHeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
<Value>173</Value>
</MaximumHeartRateBpm>
<Intensity>Resting</Intensity>
<TriggerMethod>Distance</TriggerMethod>
<Track>
<Trackpoint>
<Time>2015-01-25T12:14:34Z</Time>
<Position>
<LatitudeDegrees>50.8918607</LatitudeDegrees>
<LongitudeDegrees>16.7403161</LongitudeDegrees>
</Position>
<AltitudeMeters>233.1999969</AltitudeMeters>
<DistanceMeters>0.0000000</DistanceMeters>
<HeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
<Value>88</Value>
</HeartRateBpm>
<Extensions>
<TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Footpod">
<Speed>0.0000000</Speed>
</TPX>
</Extensions>
</Trackpoint>
</Track>
<Track />
<Extensions>
<FatCalories xmlns="http://www.garmin.com/xmlschemas/FatCalories/v1">
<Value>0</Value>
</FatCalories>
<LX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
<AvgSpeed>1.9720000</AvgSpeed>
</LX>
</Extensions>
</Lap>
</Activity>
</Activities>
</TrainingCenterDatabase>';
WITH XMLNAMESPACES(DEFAULT 'http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2')
select Act.value(N'@Sport','nvarchar(max)') AS Activity_Sport
,Act.value(N'(Id)[1]','datetime') AS Activity_Id
,Lap.value(N'@StartTime','datetime') AS Lap_StartTime
,Lap.value(N'(TotalTimeSeconds)[1]','decimal(20,8)') AS Lap_TotalTimeSeconds
--more fields
,Lap.value(N'(Calories)[1]','int') AS Lap_TotalTimeSeconds
,Lap.value(N'(AverageHeartRateBpm/Value)[1]','int') AS Lap_AverageHeartRateBpm
,Lap.value(N'(MaximumHeartRateBpm/Value)[1]','int') AS Lap_MaximumHeartRateBpm
,Lap.value(N'(Intensity)[1]','nvarchar(max)') AS Lap_Intensity
--more fields
,TrP.value(N'(Time)[1]','datetime') AS Track_Trackpoint_Time
,TrP.value(N'(Position/LatitudeDegrees)[1]','decimal(20,8)') AS Track_Trackpoint_Position_LatitudeDegrees
--more fields
FROM @xml.nodes(N'/TrainingCenterDatabase/Activities/Activity') AS A(Act)
OUTER APPLY Act.nodes(N'Lap') AS B(Lap)
OUTER APPLY Lap.nodes(N'Track/Trackpoint') AS C(TrP)
Результат
Activity_Sport Activity_Id Lap_StartTime Lap_TotalTimeSeconds ....
Running 2015-01-25 12:14:34.000 2015-01-25 12:14:34.000 507.09899900 ....
К сожалению, XSD от Garmin не работает. Он устраняет ошибки на нескольких узлах, у которых нет выхода. Я отмечаю ваш, поскольку ответ из-за этого будет работать, если XSD действителен. –
@DaytonBrown, спасибо! Если XSD Garmin является неправильным, и вы не чувствуете его создания самостоятельно, вы можете складывать несколько образцов XML и генерировать XSD для них из редактора SSIS и источника XML, как указано в пункте 3 выше. – Ferdipux