简单的xml解析

什么是解析lat和long以下xml片段的最简单方法。 没有名称空间等。

它是一个字符串变量。 不是流。

 stockholm sweden  51.1 67.98   

我到目前为止所阅读的所有内容都过于复杂,不应该是一个简单的任务,例如http://geekswithblogs.net/kobush/archive/2006/04/20/75717.aspx

我一直在看上面的链接

当然在.net中有一种更简单的方法可以做到这一点?

 using System.IO; using System.Xml; using System.Xml.XPath; 

。 。 。

  string xml = @" stockholm sweden  51.1 67.98  "; XmlReaderSettings set = new XmlReaderSettings(); set.ConformanceLevel = ConformanceLevel.Fragment; XPathDocument doc = new XPathDocument(XmlReader.Create(new StringReader(xml), set)); XPathNavigator nav = doc.CreateNavigator(); Console.WriteLine(nav.SelectSingleNode("/poi/gpoint/lat")); Console.WriteLine(nav.SelectSingleNode("/poi/gpoint/lng")); 

您当然可以使用xpath SelectSingleNode元素选择为变量。

使用Linq for XML:

  XDocument doc= XDocument.Parse("stockholmsweden51.167.98"); var points=doc.Descendants("gpoint"); foreach (XElement current in points) { Console.WriteLine(current.Element("lat").Value); Console.WriteLine(current.Element("lng").Value); } Console.ReadKey(); 

甚至比Mitch Wheat的答案更简单,因为有问题的片段是格式良好的XML文档:

 using System.Xml; using System.IO; ... string xml = @" stockholm sweden  51.1 67.98  "; XmlDocument d = new XmlDocument(); d.Load(new StringReader(xml)); Console.WriteLine(d.SelectSingleNode("/poi/gpoint/lat").InnerText); Console.WriteLine(d.SelectSingleNode("/poi/gpoint/lng").InnerText); 

如果您可以使用LINQ for XML,您可以直接读取这两个值,如下所示:

 var doc = XDocument.Parse("..."); var point = doc.Element("poi").Element("gpoint"); Console.WriteLine("Lat: {0}, Lng: {1}", point.Element("lat").Value, point.Element("lng").Value); 

如果你需要它们加倍,你必须转换它们:

 double lat = Convert.ToDouble(point.Element("lat").Value, CultureInfo.InvariantCulture); 

不要忘记指定使用分数点的文化。 否则,这将产生511.0作为纬度。

使用XElement.Parse(string text)方法执行此操作。

例:

 string xmlString = @" stockholm sweden  51.1 67.98  "; try { XElement x = XElement.Parse(xmlString); var latLng = x.Element("gpoint"); Console.WriteLine(latLng.Element("lat").Value); Console.WriteLine(latLng.Element("lng").Value); } catch { } 

希望这可以帮助!