我正在尝试解析与此帖子中使用的TCX文档类似的TCX文档:Import TCX into R using XML package
我只是尝试使用XmlDocument.SelectNodes和SelectSingleNode而不是getNodeSet。 xmlns的行如下所示:
<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">
如果我删除xmlns并且只是,我可以毫无问题地解析它。
我的(vb.net)代码:
Dim tcxXmlDocument As New System.Xml.XmlDocument()
tcxXmlDocument.Load(tcxFile)
Dim xmlnsManager = New System.Xml.XmlNamespaceManager(tcxXmlDocument.NameTable)
Dim trackpoints As New List(Of Trackpoint)
For Each tpXml As System.Xml.XmlNode In tcxXmlDocument.SelectNodes("//Trackpoint", xmlnsManager)
Dim newTrackpoint As New Trackpoint
With newTrackpoint
.Time = tpXml.SelectSingleNode("Time").InnerText
.LatitudeDegrees = tpXml.SelectSingleNode("Position/LatitudeDegrees").InnerText
.LongitudeDegrees = tpXml.SelectSingleNode("Position/LongitudeDegrees").InnerText
.HeartRateBpm = tpXml.SelectSingleNode("HeartRateBpm").InnerText
End With
trackpoints.Add(newTrackpoint)
Next
如何配置XmlNamespaceManager以便我可以访问这样的tcx文档中的节点?
谢谢,
杰森
答案 0 :(得分:1)
使用XmlNamespaceManager.AddNamespace()
方法将前缀(例如"x"
)与名称空间"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
相关联。
然后,使用"x"
前缀修复每个元素名称。
替换:
//Trackpoint
<强>与强>:
//x:Trackpoint
替换:
Time
<强>与强>:
x:Time
替换:
Position/LatitudeDegrees
<强>与强>
x:Position/x:LatitudeDegrees
替换:
Position/LongitudeDegrees
<强>与强>:
x:Position/x:LongitudeDegrees
最后,替换:
HeartRateBpm
<强>与强>:
x:HeartRateBpm