C# 简单xml解析
解析以下xml片段的lat和long最简单的方法是什么。没有名称空间等 它位于字符串变量中。不是小溪C# 简单xml解析,c#,.net,xml,parsing,C#,.net,Xml,Parsing,解析以下xml片段的lat和long最简单的方法是什么。没有名称空间等 它位于字符串变量中。不是小溪 <poi> <city>stockholm</city> <country>sweden</country> <gpoint> <lat>51.1</lat> <lng>67.98</lng> &l
<poi>
<city>stockholm</city>
<country>sweden</country>
<gpoint>
<lat>51.1</lat>
<lng>67.98</lng>
</gpoint>
</poi>
斯德哥尔摩
瑞典
51.1
67.98
到目前为止,我读到的所有东西都太复杂了,不可能是一项简单的任务
例如
我一直在看上面的链接
当然,在.net中有一种更简单的方法可以做到这一点吗
using System.IO;
using System.Xml;
using System.Xml.XPath;
stringxml=@”
斯德哥尔摩
瑞典
51.1
67.98
";
XmlReaderSettings集合=新的XmlReaderSettings();
set.ConformanceLevel=ConformanceLevel.Fragment;
XPathDocument文档=
新的XPathDocument(XmlReader.Create(新的StringReader(xml),set));
XPathNavigator nav=doc.CreateNavigator();
Console.WriteLine(导航选择单节点(“/poi/gpoint/lat”);
Console.WriteLine(导航选择单节点(“/poi/gpoint/lng”);
当然,您可以使用xpathSelectSingleNode
将
元素选择到变量中。使用Linq for XML:
XDocument doc= XDocument.Parse("<poi><city>stockholm</city><country>sweden</country><gpoint><lat>51.1</lat><lng>67.98</lng></gpoint></poi>");
var points=doc.Descendants("gpoint");
foreach (XElement current in points)
{
Console.WriteLine(current.Element("lat").Value);
Console.WriteLine(current.Element("lng").Value);
}
Console.ReadKey();
XDocument doc=XDocument.Parse(“stockholmsweden51.167.98”);
变量点=文件子体(“gpoint”);
foreach(像素当前点)
{
控制台写入线(当前元素(“lat”)值);
控制台写入线(当前元素(“lng”)值);
}
Console.ReadKey();
如果可以使用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作为纬度。甚至比Mitch Wheat的答案更简单,因为所讨论的片段是格式良好的XML文档:
using System.Xml;
using System.IO;
...
string xml = @"<poi>
<city>stockholm</city>
<country>sweden</country>
<gpoint>
<lat>51.1</lat>
<lng>67.98</lng>
</gpoint>
</poi>";
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);
使用System.Xml;
使用System.IO;
...
字符串xml=@“
斯德哥尔摩
瑞典
51.1
67.98
";
XmlDocument d=新的XmlDocument();
d、 加载(新的StringReader(xml));
Console.WriteLine(d.SelectSingleNode(“/poi/gpoint/lat”).InnerText);
Console.WriteLine(d.SelectSingleNode(“/poi/gpoint/lng”).InnerText);
使用XElement.Parse(字符串文本)方法完成此操作
例如:
string xmlString = @"<poi>
<city>stockholm</city>
<country>sweden</country>
<gpoint>
<lat>51.1</lat>
<lng>67.98</lng>
</gpoint>
</poi>";
try
{
XElement x = XElement.Parse(xmlString);
var latLng = x.Element("gpoint");
Console.WriteLine(latLng.Element("lat").Value);
Console.WriteLine(latLng.Element("lng").Value);
}
catch
{
}
string xmlString=@”
斯德哥尔摩
瑞典
51.1
67.98
";
尝试
{
XElement x=XElement.Parse(xmlString);
var latLng=x.Element(“gpoint”);
控制台写入线(latLng.Element(“lat”)值);
控制台写入线(latLng.Element(“lng”).Value);
}
抓住
{
}
希望这有帮助 这是一种不错的方法,但我更喜欢子代,因为它对文档结构的依赖性更小,如果有更改,失败的可能性也更小。您也可以取消
new StringReader
,只使用d.LoadXml(xml)
string xmlString = @"<poi>
<city>stockholm</city>
<country>sweden</country>
<gpoint>
<lat>51.1</lat>
<lng>67.98</lng>
</gpoint>
</poi>";
try
{
XElement x = XElement.Parse(xmlString);
var latLng = x.Element("gpoint");
Console.WriteLine(latLng.Element("lat").Value);
Console.WriteLine(latLng.Element("lng").Value);
}
catch
{
}