2012-07-24 134 views
1

我正嘗試讀取在Garmin GPS設備內創建的GPX文件。我有下面的代碼來試圖提取所有的數據,但是它掛在節點上,它是子節點,也就是說。 =>gpx文件擴展節點gpxtpx:TrackPointExtension

下面的代碼

//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> 

我可以訪問所有其他節點就好了,但在嘗試訪問人力資源節點的時候,我得到的錯誤。

任何幫助表示讚賞。

+1

如果出現錯誤,這是建議將它們包含在問題中。它會增加你得到答案的機會 – Eddy 2012-07-25 18:46:48

回答

1

嘗試改變

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

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

工作。謝謝 – sevargdcg 2013-08-01 16:09:09

0

名稱空間建議以上的作品,我認爲有必要,以防止空節點:

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 
+0

在StackOverflow上,您不能將答案引用爲「上方」,因爲每次打開頁面時,得分相同的答案會隨機排列。因此,請使用回答者的姓名來引用其他答案。 – Artemix 2013-07-31 12:53:57