2017-03-05 24 views
1

私はGPXファイル(場所データ用のXMLファイル)を読み込もうとしています。これは構造です:XmlDocumentでGPXファイルを読み取る

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

過去に100個以上のXMLファイルが読み込まれましたが、これは動作しません。私は、このようにGPXファイルを読んでいる:

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

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

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

} 

変数は「gpxfileは」正しいgpxfile、(テスト)へのパスです。

+0

何が問題なのですか? –

+0

私は 'System.xml'を嫌い!常にSystem.Xml.Linqを使い、もっと簡単で包括的です。あなたが 'Xml.Linq'を望むなら、私はあなたに解決策を与えることができます。 –

答えて

2

名前空間で作業する必要があります。要素trkptは、現在のコンテキストには存在しません。名前空間http://www.topografix.com/GPX/1/1にのみ存在します。ここでは、上記の名前空間での作業の例を示します。xをURIのエイリアスにします。

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

x名前空間内のノードを選択注(代わり//trkptの例えば//x:trkpt)。

+0

ありがとう@ redlynx82、これはトリックでした! –

関連する問題