2017-03-05 2 views
1

J'essaie de lire un fichier GPX (un type de fichier XML pour les données de localisation). Voici la structure:Lire le fichier GPX avec XmlDocument

<?xml version="1.0"?> 
<gpx creator="GPX-service" version="1.1" 
xmlns="http://www.topografix.com/GPX/1/1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 
http://www.topografix.com/GPX/1/1/gpx.xsd"> 
<trk> 
<name>Route</name> 
<trkseg> 
<trkpt lat="51.966738" lon="6.501578"> 
</trkpt> 
<trkpt lat="51.966689" lon="6.501456"> 
</trkpt> 
</trkseg> 
</trk> 
</gpx> 

I'v readed dans plus de cent fichiers XML dans le passé, mais celui-ci ne fonctionnera pas. Je lis la GPX fichier ainsi:

XmlDocument gpxDoc = new XmlDocument(); 
gpxDoc.Load(gpxfile); 

XmlNodeList nl = gpxDoc.SelectNodes("trkpt"); 

foreach (XmlNode xnode in nl) 
{ 
    string name = xnode.Name; 

} 

Variable « gpxfile » est le chemin vers le gpxfile, ce qui est correct (testé).

+0

Qu'est-ce qui ne fonctionne pas? –

+0

Je déteste 'System.xml'! Et toujours en utilisant 'System.Xml.Linq' qui est beaucoup plus facile et plus complet. Si vous voulez 'Xml.Linq' je peux vous donner une solution. –

Répondre

2

Vous devez travailler avec des espaces de noms. L'élément trkpt n'existe pas dans le contexte actuel, uniquement dans l'espace de noms http://www.topografix.com/GPX/1/1. Voici un exemple de la façon dont vous travaillez avec les espaces de noms - laissez x être un alias de l'URI.

XmlNamespaceManager nsmgr = new XmlNamespaceManager(gpxDoc.NameTable); 
nsmgr.AddNamespace("x", "http://www.topografix.com/GPX/1/1");    
XmlNodeList nl = gpxDoc.SelectNodes("//x:trkpt", nsmgr); 

Notez que nous choisissons des noeuds dans l'espace de noms x maintenant (par exemple //x:trkpt au lieu de //trkpt).

+0

Merci @ redlynx82, cela a fait l'affaire! –