简单的xml解析

Chr*_*sCa 7 .net c# xml parsing

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

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

<poi>
      <city>stockholm</city>
      <country>sweden</country>
      <gpoint>
        <lat>51.1</lat>
        <lng>67.98</lng>
      </gpoint>
</poi>
Run Code Online (Sandbox Code Playgroud)

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

我一直在看上面的链接

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

Ash*_*Ash 18

使用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(); 
Run Code Online (Sandbox Code Playgroud)


Mit*_*eat 7

using System.IO;
using System.Xml;
using System.Xml.XPath;
Run Code Online (Sandbox Code Playgroud)

...

    string xml = @"<poi>      
                     <city>stockholm</city>  
                     <country>sweden</countr>
                        <gpoint>        
                            <lat>51.1</lat>        
                            <lng>67.98</lng>    
                        </gpoint>
                   </poi>";

    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"));
Run Code Online (Sandbox Code Playgroud)

您当然可以使用xpath SelectSingleNode<gpoint>元素选择为变量.


Rob*_*ney 5

甚至比 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);
Run Code Online (Sandbox Code Playgroud)