简单的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("stockholm sweden 51.1 67.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 { }
希望这可以帮助!