读取XML到列表使用xmlread
本文关键字:使用 xmlread string XML 列表 读取 | 更新日期: 2023-09-27 18:12:15
我将读取gps点到列表的xml文件,然后将它们转换为多边形并保存在数据库中。这是我的问题,当我试着读文件的每一项都是一样的,你能帮我解决我的问题吗?提前感谢下面是我的代码:
public List<string[]> loadXML(string xmlpath)
{
List<string[]> points = new List<string[]>();
XmlReader xmlReader = XmlReader.Create(xmlpath);
while (xmlReader.Read())
{
string[] item = new string[3];
if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "trkpt"))
{
if (xmlReader.HasAttributes)
{
item[0] = xmlReader.GetAttribute("lat");
item[1] = xmlReader.GetAttribute("lon");
}
}
if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "ele"))
{
item[2] = xmlReader.ReadInnerXml();
}
points.Add(item);
}
return points;
}
这是我的一段xml:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="" xmlns:gpxx="" xmlns:wptx1="" xmlns:gpxtpx="" creator="GPSMAP 78s" version="1.1" xmlns:xsi="" xsi:schemaLocation="">
<metadata>
<link href=""><text>Garmin International</text></link>
<time>2014-06-18T13:55:07Z</time></metadata>
<trk><name>PV164B2KHE</name>
<extensions><gpxx:TrackExtension><gpxx:DisplayColor>Cyan</gpxx:DisplayColor></gpxx:TrackExtension></extensions>
<trkseg>
<trkpt lat="31.0403929744" lon="51.5264290944"><ele>2089.08</ele><time>2014-06-18T13:45:57Z</time></trkpt>
<trkpt lat="31.0403881129" lon="51.5264252387"><ele>2088.60</ele><time>2014-06-18T13:46:01Z</time></trkpt></trkseg></trk></gpx>
我想为每个点提取lat,lon和ele
我会使用Linq to XML:
var xmlDocument = XDocument.Load("path");
XNamepsace ns = xmlDocument.Root.GetDefaultNamespace();
var values = xmlDocument.Root
.Descendants(ns + "trkpt")
.Select(x => new
{
lat = (string)x.Attribute("lat"),
lon = (string)x.Attribute("lon"),
ele = (string)x.Element(ns + "ele")
});
您的错误是xmlReader.Read()
读取下一个节点,但您正在为每个节点创建string[]
数组。一个节点不能同时为trkpt
和ele
。所以这永远不会给你想要的结果