【问题标题】:gpx file Extension node gpxtpx:TrackPointExtensiongpx 文件扩展节点 gpxtpx:TrackPointExtension
【发布时间】:2012-07-23 04:29:19
【问题描述】:

我正在尝试读取在 Garmin GPS 设备中创建的 GPX 文件。我有以下代码尝试提取所有数据,但它挂在节点中并且它是子节点,即。 =>

这是代码

//returns http://www.topografix.com/GPX/1/1
XNamespace gpx = GetGpxNameSpace();
XDocument gpxDoc = GetGpxDoc();
XNamespace gpxtpx = XNamespace.Get("gpxtpx");
var waypoints = from waypoint in gpxDoc.Descendants(gpx + "trkpt")
                select new
                {
                    Latitude = waypoint.Attribute("lat").Value,
                    Longitude = waypoint.Attribute("lon").Value,
                    Elevation = waypoint.Element(gpx + "ele") != null ?
                        waypoint.Element(gpx + "ele").Value : null,
                    Dt = waypoint.Element(gpx + "time") != null ?
                        waypoint.Element(gpx + "time").Value : null,
                    hr = waypoint.Element(gpx+ "extensions").Element(gpxtpx +"TrackPointExtension").Element(gpxtpx +"hr").Value
                };

StringBuilder sb = new StringBuilder();
foreach (var wpt in waypoints)
{
    // This is where we'd instantiate data
    // containers for the information retrieved.
    sb.Append(
        string.Format("Name:{0} Latitude:{1} Longitude:{2} Elevation:{3} Date:{4}\n",
        "x", wpt.Latitude, wpt.Longitude,
        wpt.Elevation, wpt.Dt));
}

return sb.ToString();

还有xml节点

<trkseg>
   <trkpt lon="-111.5252978168428" lat="35.07395471446216">
      <ele>2084.800048828125</ele>
      <time>2012-07-15T14:47:16.000Z</time>
      <extensions>
         <gpxtpx:TrackPointExtension>
            <gpxtpx:hr>155</gpxtpx:hr>
         </gpxtpx:TrackPointExtension>
      </extensions>
   </trkpt>
...
</trkseg>

我可以正常访问所有其他节点,但是尝试访问 hr 节点时出现错误。

感谢任何帮助。

【问题讨论】:

  • 如果您遇到错误,建议将它们包含在问题中。它会增加你得到答案的机会

标签: c# xml xml-parsing gpx garmin


【解决方案1】:

尝试改变

XNamespace gpxtpx = XNamespace.Get("gpxtpx");

XNamespace gpxtpx = XNamespace.Get("http://www.garmin.com/xmlschemas/TrackPointExtension/v1");

【讨论】:

    【解决方案2】:

    上面的命名空间建议有效,我发现有必要防止空节点:

    HeartRate = trackpoint.Element(gpx + "extensions") != null ?
                                          (trackpoint.Element(gpx + "extensions").Element(gpxtpx + "TrackPointExtension") != null ?
                                           (trackpoint.Element(gpx + "extensions").Element(gpxtpx + "TrackPointExtension").Element(gpxtpx +"hr") != null ? 
                                              trackpoint.Element(gpx + "extensions").Element(gpxtpx + "TrackPointExtension").Element(gpxtpx +"hr").Value : null ) : null   ) : null
    

    【讨论】:

    • 在 StackOverflow 上,您不能将答案引用为“高于”,因为每次打开页面时,相同分数的答案都是随机排列的。因此,请改用回答者的姓名来引用其他答案。
    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2012-04-20
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多