Od wczoraj siedzę nad jednym problemem. Nie mogę zaczytać danych z pliku TCX (generowany przez Endomondo, jest tak naprawdę XML'em), do dziś nie udało mi się wczytać ani jednej zmiennej co jest bardzo frustrujące, gdyż pracowałem wcześniej z xml'ami i nie miałem aż takich problemów. Program wygląda następująco:
Program.cs :
using System;
using AnalizatorEndomondo.Loader;
namespace AnalizatorEndomondo
{
class Program
{
static void Main(string[] args)
{
TCXLoader.ParseFile(TCXLoader.LoadFile());
}
}
}
TCXLoader.cs:
using System;
using System.Linq;
using System.Xml.Linq;
using AnalizatorEndomondo.Models;
namespace AnalizatorEndomondo.Loader
{
public class TCXLoader
{
public static XDocument LoadFile()
{
const string path = @"C:\Users\obaran\source\repos\EndAn\EndAn\Loader\";
var tcx = XDocument.Load(path + @"20180809_163604.tcx");
return tcx;
}
public static void ParseFile(XDocument inputFile)
{
var lvl0 = inputFile;
var training = new Training() //HERE IS ERROR!!
{
Activities = lvl0.Element("Activities").Elements("Activity")
.Select(a => new Activity()
{
Type = a.Attribute("Sport").Value
}).ToList()
};
}
}
}
Training.cs :
using System;
using System.Collections.Generic;
namespace AnalizatorEndomondo.Models
{
public class Training
{
public List<Activity> Activities { get; set; }
}
}
Activity.cs :
using System;
namespace AnalizatorEndomondo.Models
{
public class Activity
{
public string Type { get; set; }
}
}
Plik z endomondo:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<Activities>
<Activity Sport="Biking">
<Id>2018-08-09T16:36:04Z</Id>
<Lap StartTime="2018-08-09T16:36:04Z">
<TotalTimeSeconds>1879.06</TotalTimeSeconds>
<DistanceMeters>9373.99959564209</DistanceMeters>
<Calories>351</Calories>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2018-08-09T16:36:04Z</Time>
<Position>
<LatitudeDegrees>50.0514405</LatitudeDegrees>
<LongitudeDegrees>19.2179906</LongitudeDegrees>
</Position>
<DistanceMeters>0.0</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:07Z</Time>
<Position>
<LatitudeDegrees>50.0514405</LatitudeDegrees>
<LongitudeDegrees>19.2179906</LongitudeDegrees>
</Position>
<AltitudeMeters>220.1</AltitudeMeters>
<DistanceMeters>0.0</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:28Z</Time>
<Position>
<LatitudeDegrees>50.0514874</LatitudeDegrees>
<LongitudeDegrees>19.2179671</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>4.999999888241291</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:43Z</Time>
<Position>
<LatitudeDegrees>50.05155</LatitudeDegrees>
<LongitudeDegrees>19.2179955</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>13.000000268220901</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:45Z</Time>
<Position>
<LatitudeDegrees>50.0515816</LatitudeDegrees>
<LongitudeDegrees>19.2180651</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>18.99999938905239</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:50Z</Time>
<Position>
<LatitudeDegrees>50.0516403</LatitudeDegrees>
<LongitudeDegrees>19.2181889</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>29.999999329447746</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:53Z</Time>
<Position>
<LatitudeDegrees>50.05165</LatitudeDegrees>
<LongitudeDegrees>19.2182758</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>35.999998450279236</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:36:56Z</Time>
<Position>
<LatitudeDegrees>50.0516894</LatitudeDegrees>
<LongitudeDegrees>19.2183225</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>41.999999433755875</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:01Z</Time>
<Position>
<LatitudeDegrees>50.0517826</LatitudeDegrees>
<LongitudeDegrees>19.2183305</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>52.000001072883606</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:07Z</Time>
<Position>
<LatitudeDegrees>50.051925</LatitudeDegrees>
<LongitudeDegrees>19.2182029</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>70.00000029802322</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:13Z</Time>
<Position>
<LatitudeDegrees>50.0520505</LatitudeDegrees>
<LongitudeDegrees>19.2183559</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>87.99999952316284</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:17Z</Time>
<Position>
<LatitudeDegrees>50.0521553</LatitudeDegrees>
<LongitudeDegrees>19.218499</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>104.00000214576721</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:21Z</Time>
<Position>
<LatitudeDegrees>50.0522612</LatitudeDegrees>
<LongitudeDegrees>19.2186515</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>119.99999731779099</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:25Z</Time>
<Position>
<LatitudeDegrees>50.052381</LatitudeDegrees>
<LongitudeDegrees>19.2188203</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>137.9999965429306</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:29Z</Time>
<Position>
<LatitudeDegrees>50.0524924</LatitudeDegrees>
<LongitudeDegrees>19.2189498</LongitudeDegrees>
</Position>
<AltitudeMeters>230.5</AltitudeMeters>
<DistanceMeters>152.99999713897705</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:31Z</Time>
<Position>
<LatitudeDegrees>50.0525394</LatitudeDegrees>
<LongitudeDegrees>19.2189987</LongitudeDegrees>
</Position>
<AltitudeMeters>231.0</AltitudeMeters>
<DistanceMeters>158.9999943971634</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:33Z</Time>
<Position>
<LatitudeDegrees>50.0525822</LatitudeDegrees>
<LongitudeDegrees>19.2190866</LongitudeDegrees>
</Position>
<AltitudeMeters>231.0</AltitudeMeters>
<DistanceMeters>166.99999570846558</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:37Z</Time>
<Position>
<LatitudeDegrees>50.0526967</LatitudeDegrees>
<LongitudeDegrees>19.2192789</LongitudeDegrees>
</Position>
<AltitudeMeters>231.7</AltitudeMeters>
<DistanceMeters>186.0000044107437</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:41Z</Time>
<Position>
<LatitudeDegrees>50.0528001</LatitudeDegrees>
<LongitudeDegrees>19.2194758</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>203.99999618530273</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:45Z</Time>
<Position>
<LatitudeDegrees>50.0529137</LatitudeDegrees>
<LongitudeDegrees>19.219666</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>223.00000488758087</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:48Z</Time>
<Position>
<LatitudeDegrees>50.0529888</LatitudeDegrees>
<LongitudeDegrees>19.2197761</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>233.99999737739563</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:52Z</Time>
<Position>
<LatitudeDegrees>50.0530712</LatitudeDegrees>
<LongitudeDegrees>19.2199161</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>247.99999594688416</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:56Z</Time>
<Position>
<LatitudeDegrees>50.0531812</LatitudeDegrees>
<LongitudeDegrees>19.2200878</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>264.99998569488525</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:37:59Z</Time>
<Position>
<LatitudeDegrees>50.053245</LatitudeDegrees>
<LongitudeDegrees>19.2202061</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>275.9999930858612</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:03Z</Time>
<Position>
<LatitudeDegrees>50.0533334</LatitudeDegrees>
<LongitudeDegrees>19.2203725</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>291.9999957084656</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:07Z</Time>
<Position>
<LatitudeDegrees>50.0534112</LatitudeDegrees>
<LongitudeDegrees>19.2205239</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>305.9999942779541</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:11Z</Time>
<Position>
<LatitudeDegrees>50.0535387</LatitudeDegrees>
<LongitudeDegrees>19.2206923</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>324.0000009536743</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:15Z</Time>
<Position>
<LatitudeDegrees>50.053646</LatitudeDegrees>
<LongitudeDegrees>19.220854</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>340.9999907016754</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:18Z</Time>
<Position>
<LatitudeDegrees>50.0537148</LatitudeDegrees>
<LongitudeDegrees>19.2209573</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>351.99999809265137</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:22Z</Time>
<Position>
<LatitudeDegrees>50.0538325</LatitudeDegrees>
<LongitudeDegrees>19.2211332</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>370.0000047683716</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:26Z</Time>
<Position>
<LatitudeDegrees>50.0539679</LatitudeDegrees>
<LongitudeDegrees>19.2213016</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>388.9999985694885</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:30Z</Time>
<Position>
<LatitudeDegrees>50.0540939</LatitudeDegrees>
<LongitudeDegrees>19.2214758</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>407.99999237060547</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:35Z</Time>
<Position>
<LatitudeDegrees>50.0541764</LatitudeDegrees>
<LongitudeDegrees>19.2216877</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>425.9999990463257</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:39Z</Time>
<Position>
<LatitudeDegrees>50.0542809</LatitudeDegrees>
<LongitudeDegrees>19.2218288</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>441.0000145435333</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:43Z</Time>
<Position>
<LatitudeDegrees>50.0544083</LatitudeDegrees>
<LongitudeDegrees>19.2220179</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>460.999995470047</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:47Z</Time>
<Position>
<LatitudeDegrees>50.0545218</LatitudeDegrees>
<LongitudeDegrees>19.2222048</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>479.0000021457672</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:51Z</Time>
<Position>
<LatitudeDegrees>50.0545937</LatitudeDegrees>
<LongitudeDegrees>19.2223906</LongitudeDegrees>
</Position>
<AltitudeMeters>232.3</AltitudeMeters>
<DistanceMeters>493.99998784065247</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:56Z</Time>
<Position>
<LatitudeDegrees>50.0546962</LatitudeDegrees>
<LongitudeDegrees>19.2225563</LongitudeDegrees>
</Position>
<AltitudeMeters>232.3</AltitudeMeters>
<DistanceMeters>510.99997758865356</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:38:59Z</Time>
<Position>
<LatitudeDegrees>50.0547706</LatitudeDegrees>
<LongitudeDegrees>19.2226582</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>522.0000147819519</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:06Z</Time>
<Position>
<LatitudeDegrees>50.0549616</LatitudeDegrees>
<LongitudeDegrees>19.2229678</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>552.9999732971191</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:13Z</Time>
<Position>
<LatitudeDegrees>50.0551763</LatitudeDegrees>
<LongitudeDegrees>19.223252</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>583.9999914169312</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:21Z</Time>
<Position>
<LatitudeDegrees>50.0553976</LatitudeDegrees>
<LongitudeDegrees>19.223566</LongitudeDegrees>
</Position>
<AltitudeMeters>232.8</AltitudeMeters>
<DistanceMeters>616.9999837875366</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:26Z</Time>
<Position>
<LatitudeDegrees>50.0555842</LatitudeDegrees>
<LongitudeDegrees>19.2239023</LongitudeDegrees>
</Position>
<AltitudeMeters>232.9</AltitudeMeters>
<DistanceMeters>648.9999890327454</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:32Z</Time>
<Position>
<LatitudeDegrees>50.0557774</LatitudeDegrees>
<LongitudeDegrees>19.2242462</LongitudeDegrees>
</Position>
<AltitudeMeters>232.9</AltitudeMeters>
<DistanceMeters>681.9999814033508</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:37Z</Time>
<Position>
<LatitudeDegrees>50.0559987</LatitudeDegrees>
<LongitudeDegrees>19.2245177</LongitudeDegrees>
</Position>
<AltitudeMeters>232.7</AltitudeMeters>
<DistanceMeters>712.9999995231628</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:40Z</Time>
<Position>
<LatitudeDegrees>50.0561094</LatitudeDegrees>
<LongitudeDegrees>19.2247132</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>731.9999933242798</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:43Z</Time>
<Position>
<LatitudeDegrees>50.0562124</LatitudeDegrees>
<LongitudeDegrees>19.2248783</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>748.0000257492065</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:46Z</Time>
<Position>
<LatitudeDegrees>50.0563139</LatitudeDegrees>
<LongitudeDegrees>19.2250394</LongitudeDegrees>
</Position>
<AltitudeMeters>232.5</AltitudeMeters>
<DistanceMeters>763.9999985694885</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:49Z</Time>
<Position>
<LatitudeDegrees>50.056417</LatitudeDegrees>
<LongitudeDegrees>19.2251917</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>779.9999713897705</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:52Z</Time>
<Position>
<LatitudeDegrees>50.0565175</LatitudeDegrees>
<LongitudeDegrees>19.2253525</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>796.0000038146973</DistanceMeters>
</Trackpoint>
<Trackpoint>
<Time>2018-08-09T16:39:55Z</Time>
<Position>
<LatitudeDegrees>50.0566237</LatitudeDegrees>
<LongitudeDegrees>19.2254873</LongitudeDegrees>
</Position>
<AltitudeMeters>232.4</AltitudeMeters>
<DistanceMeters>811.9999766349792</DistanceMeters>
</Trackpoint>
</Track>
</Lap>
</Activity>
</Activities>
</TrainingCenterDatabase>
Gdyby udało mi się zczytać Sport = "Biking" z Activities oraz Id, to byłbym już w domu, dlatego proszę o pomoc gdyż wczoraj siedziałem nad tym 8 godzin, próbowałem XmlDocument, XDocument oraz Serializacji i nic z tego mi nie wyszło.
#Edit_01 - Poniższy kod nie zwraca mi żadnej wartości
XPathNavigator nav = inputFile.CreateNavigator();
Console.WriteLine(nav.SelectSingleNode(("/TrainingCenterDatabase/Activities/Activity/Id")));
#Edit_02 - Tego sposobu też próbowałem wczoraj, efekt - nic
var points = inputFile.Descendants("Id");
foreach (XElement cur in points)
{
Console.WriteLine(cur.Element("Id").Value);
}
#Edit_03 - W ten sposób mogę wyświetlić wszystkie dane, ale w taki sposób że są bezużyteczne, ale może to jakiś trop
var lvl0 = inputFile;
foreach (var node in lvl0.DescendantNodes().OfType<XText>())
{
var value = node.Value.Trim();
Console.WriteLine(value);
}
#Edit_04 - XmlDocument też słabo, w debugerze nic nie ma, plik się wczytuje ale jak próbuję cokolwiek robić z node'ami to niestety null
StringBuilder result = new StringBuilder();
XmlNodeList xml = inputFile.SelectNodes("TrainingCenterDatabase");
foreach (XmlNode level1Element in xml)
{
result.AppendLine(level1Element["Activities"].Name);
}
Console.WriteLine(result);