Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单xml解析_C#_.net_Xml_Parsing - Fatal编程技术网

C# 简单xml解析

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

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

它位于字符串变量中。不是小溪

<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”);
当然,您可以使用xpath
SelectSingleNode
元素选择到变量中。

使用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
        {
        }