【问题标题】:parsing tcx document using xdocument selectsinglenode使用 xdocument selectsinglenode 解析 tcx 文档
【发布时间】:2012-08-18 12:48:39
【问题描述】:

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

谢谢,

杰森

【问题讨论】:

    标签: vb.net xpath xmldocument


    【解决方案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
    

    【讨论】:

    • 这实际上就是我想要的。我的错误印象是您给命名空间的名称(在您的示例中为 x)必须与 xml 文件中存在的名称匹配(在本例中为空白)。现在我知道得更多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多