C# - 读取XML文件

时间:2013-08-13 06:16:21

标签: c# xml linq xml-parsing

我正在尝试读取XML文件,以便将数据集成到Windows Phone App中。

我关注了其他一些主题,但我无法让它发挥作用(我觉得我几乎已经到了这一点,但仍然遗漏了一些东西)。

我试图阅读的XML是:

<?xml version="1.0" encoding="utf-8"?>
<items>
    <item value="0">status</item>
    <item value="210">online</item>
    <item value="22h 49m 49s">uptime</item>
    <item value="90">latency</item>
    <item value="423">maxplayers_ever</item>
    <item value="263">maxplayers_week</item>
    <item value="252">maxplayers</item>
</items>

它包含游戏服务器的信息。

我是通过网址阅读的,这是我使用的代码:

    public class Item
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }

    private void LoadXMLFile()
    {
        WebClient wc = new WebClient();
        wc.DownloadStringCompleted += HttpsCompleted;
        wc.DownloadStringAsync(new Uri("https://www.forgottenlands.eu/data.xml.php"));
    }

    private void HttpsCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            this.Items.Add(new ItemViewModel() { LineOne = "TEST I REACH HTTPS" });

            XDocument statusinfo = XDocument.Parse(e.Result, LoadOptions.None);

            List<Item> items =
                (from node in statusinfo.Elements("Item")
                 select new Item
                 {
                     Name = (string)node.Value,

                     Value = (string)node.Attribute("Value")

                 }).ToList();

            foreach (var item in items)
                this.Items.Add(new ItemViewModel() { LineOne = item.Name + " " + item.Value });

            this.IsDataLoaded = true;
        }   
    }

    public void LoadData()
    {
        // Sample data; replace with real data
        // the xml file contains your provided xml code

        LoadXMLFile();
    }

似乎我正确地进入httpscompleted函数,但我没有正确获取XML数据。

2 个答案:

答案 0 :(得分:7)

您当前的代码有三个问题:

  • 您要求文档查找Item元素,而不是文档根元素
  • 您要求使用Item元素而不是item元素
  • 您要求Value属性而不是value属性

我也没有使用查询表达式,因为它使事情变得比它们需要的更复杂:

var items = statusInfo.Root.Elements("item")
                      .Select(node => new Item {
                                 Name = (string) node,
                                 Value = (string) node.Attribute("value")
                              })
                      .ToList();

答案 1 :(得分:0)

使用此:

 XDocument DocumentObject = XDocument.Load("yourxml.xml");
 IEnumerable<XElement> Itrem = from ItemInfo in DocumentObject.Descendants("items").Elements("item") select ItemInfo;

        foreach (var t in Itrem)
        {
            string Item = (string)t.Value;
            string Itemvalue = (string)t.Attribute("value").Value;


        }