任何人都可以帮助我,为什么我从XML文档中得不到任何东西?我认为它与第一行有关,因为如果我用“xsi:”或“ns3:”之类的东西擦除这个和所有其他行,我得到预期的输出“骑自行车”。
代码:
DECLARE @XmlDocumentHandle int
DECLARE @XmlDocument nvarchar(max)
SET @XmlDocument =
'<TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ns5="http://www.garmin.com/xmlschemas/ActivityGoals/v1" xmlns:ns3="http://www.garmin.com/xmlschemas/ActivityExtension/v2" xmlns:ns2="http://www.garmin.com/xmlschemas/UserProfile/v2" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://www.garmin.com/xmlschemas/ProfileExtension/v1">
<Activities>
<Activity Sport="Biking">
<Id>2014-09-28T08:48:39.000Z</Id>
<Lap StartTime="2014-09-28T08:48:39.000Z">
<TotalTimeSeconds>17766.56</TotalTimeSeconds>
<DistanceMeters>65047.04</DistanceMeters>
<MaximumSpeed>15.639999</MaximumSpeed>
<Calories>4113</Calories>
<AverageHeartRateBpm>
<Value>142</Value>
</AverageHeartRateBpm>
<MaximumHeartRateBpm>
<Value>182</Value>
</MaximumHeartRateBpm>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2014-09-28T08:48:40.000Z</Time>
<Position>
<LatitudeDegrees>48.18774196319282</LatitudeDegrees>
<LongitudeDegrees>16.302834944799542</LongitudeDegrees>
</Position>
<AltitudeMeters>83.5999984741211</AltitudeMeters>
<DistanceMeters>3.180000066757202</DistanceMeters>
<HeartRateBpm>
<Value>94</Value>
</HeartRateBpm>
<Extensions>
<ns3:TPX>
<ns3:Speed>0.0</ns3:Speed>
</ns3:TPX>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2014-09-28T08:48:45.000Z</Time>
<Position>
<LatitudeDegrees>48.18779996596277</LatitudeDegrees>
<LongitudeDegrees>16.30263394676149</LongitudeDegrees>
</Position>
<AltitudeMeters>83.4000015258789</AltitudeMeters>
<DistanceMeters>19.360000610351562</DistanceMeters>
<HeartRateBpm>
<Value>100</Value>
</HeartRateBpm>
<Extensions>
<ns3:TPX>
<ns3:Speed>0.0</ns3:Speed>
</ns3:TPX>
</Extensions>
</Trackpoint>
</Track>
</Lap>
<Creator xsi:type="Device_t">
<Name>Garmin Edge 705</Name>
<UnitId>3417593319</UnitId>
<ProductID>625</ProductID>
<Version>
<VersionMajor>3</VersionMajor>
<VersionMinor>3</VersionMinor>
<BuildMajor>0</BuildMajor>
<BuildMinor>0</BuildMinor>
</Version>
</Creator>
</Activity>
</Activities>
<Author xsi:type="Application_t">
<Name>Garmin Connect API</Name>
<Build>
<Version>
<VersionMajor>16</VersionMajor>
<VersionMinor>15</VersionMinor>
<BuildMajor>4</BuildMajor>
<BuildMinor>4</BuildMinor>
</Version>
</Build>
<LangID>en</LangID>
<PartNumber>003-F3589-01</PartNumber>
</Author>
</TrainingCenterDatabase>'
EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @XmlDocument
SELECT *
FROM OPENXML (@XmlDocumentHandle, 'TrainingCenterDatabase/Activities/Activity')
WITH (
Sport nvarchar(max) '@Sport'
)
EXEC sp_xml_removedocument @XmlDocumentHandle
答案 0 :(得分:0)
SELECT *
FROM OPENXML (@XmlDocumentHandle, '*[local-name()=''TrainingCenterDatabase'']/*[local-name()=''Activities'']/*[local-name()=''Activity'']')
WITH (
Sport nvarchar(max) '@Sport'
)
您可以learn about XML namespaces。
在该特定情况下,表达式xmlns =&#34; http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"在TrainingCenterDatabase节点中定义默认命名空间,因此除非另有说明,否则所有后代元素都绑定到此命名空间。
您的XPath正在尝试处理绑定到默认&#34; no namespace&#34;的元素。名称空间,所以他们不匹配。
您可以执行
SELECT * FROM OPENXML (@XmlDocumentHandle, '.')
查看&namespace?&#39;中的每个元素的命名空间结果表的列。