使用xdocument chooseinglenode解析tcx文档

时间:2012-08-18 12:48:40

标签: vb.net xpath xmldocument

我正在尝试解析与此帖子中使用的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文档中的节点?

谢谢,

杰森

1 个答案:

答案 0 :(得分:1)

使用XmlNamespaceManager.AddNamespace()方法将前缀(例如"x")与名称空间"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"相关联。

在XPath表达式中

然后,使用"x"前缀修复每个元素名称。

替换

//Trackpoint

<强>与

//x:Trackpoint

替换

Time

<强>与

x:Time

替换

Position/LatitudeDegrees

<强>与

x:Position/x:LatitudeDegrees

替换

Position/LongitudeDegrees

<强>与

x:Position/x:LongitudeDegrees

最后,替换

HeartRateBpm

<强>与

x:HeartRateBpm