繁体   English   中英

C# - 读取XML文件

[英]C# - Reading XML file

我正在尝试读取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>

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

我正在从URL读取它,这是我使用的代码:

    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数据。

当前代码中存在三个问题:

  • 您要求文档中的Item元素,而不是文档根元素
  • 您要的是Item元素而不是item元素
  • 您要求的是Value属性而不是value属性

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

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

用这个:

 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;


        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM