c# - 使用 XmlDocument 读取 GPX 文件

标签 c# asp.net xml xml-parsing

我正在尝试读取 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 的路径,这是正确的(已测试)。

最佳答案

您需要使用 namespace 。元素 trkpt 在当前上下文中不存在,仅存在于命名空间 http://www.topografix.com/GPX/1/1 中。这是一个如何使用所述 namespace 的示例 - 让 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)。

关于c# - 使用 XmlDocument 读取 GPX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42609110/

相关文章:

c# - JSON 字符串不填充对象的基本属性 (MVC 4)

.net - .Net 4.5 是否支持 XML 1.1(对于 XML 1.0 中无效的字符)?

c# - .NET 中的混合语言项目

c# - 在 C# 中枚举表单上的记录

c# - Windows 窗体 - 从窗体内的面板检测按钮单击

asp.net - 如何在 asp.net 3.5 中使用 NHibernate

c# - YouTube API v3在上传过程中引发异常

javascript - 如何访问由javascript动态创建的代码隐藏中的控件值

java - Spring 4 : How to map RequestMapping URLs to particular controller

Excel CustomUI 功能区放置在另一个 CustomUI 功能区选项卡旁边