【问题标题】:Read GPX file with XmlDocument使用 XmlDocument 读取 GPX 文件
【发布时间】:2017-03-05 13:47:51
【问题描述】:

我正在尝试读取 GPX 文件(一种用于位置数据的 XML 文件)。这是结构:

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

我过去读过一百多个 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 的路径,它是正确的(经过测试)。

【问题讨论】:

  • 什么不起作用?
  • 我讨厌System.xml!并且始终使用System.Xml.Linq,这样更容易、更全面。如果你想要Xml.Linq我可以给你一个解决方案。

标签: c# asp.net xml xml-parsing


【解决方案1】:

您需要使用命名空间。元素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 命名空间中的节点(例如,//x:trkpt 而不是 //trkpt)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2021-11-18
    • 2013-08-06
    • 2013-08-21
    • 2013-08-28
    • 2015-05-18
    相关资源
    最近更新 更多