C# - 从Dictionary中显示列表框中XML文件的数据

时间:2016-05-28 06:39:52

标签: c# xml dictionary listbox

我有一个包含数据的XML文件,我想在一个页面上只显示组织的内容,并在另一个页面上显示相应的数据(地址,ID)。在文本框中。

mesh

我已将此数据转换为我的C#,它目前存储在字典中。在单独的C#文件类中。

XML:
<Data>
  <Organisation>
<Name>Accident Compensation Corporation</Name>
    <ID> 022 12345678 </ID>
    <Address> 220 Bunny Street</Address>
    </Organisation>

  <Organisation>
    <Name>Test 2</Name>
    <Address> 50 Lambton Quay</Address>
    <ID> 021 8972468739 </ID>
  </Organisation>


</Data>

}

这就是我加载XML节点并尝试在列表框中显示它们的方法。但是,它不能在&#34;尝试&#34;然后跳到&#34; Catch&#34;显示&#34;错误&#34;

public class Organisation
{
    public int id;
    public string name;
    public string address;

    public Organisation(int id, string name, string address)
    {
        this.id = id;
        this.name = name;
        this.address = address;
    }
}

这是第二页上的代码,将它们放在文本框中

                XmlNodeList names = doc.GetElementsByTagName("Name");
                XmlNodeList ids = doc.GetElementsByTagName("ID");
                XmlNodeList addresses = doc.GetElementsByTagName("Address");





                for (int i = 0; i < names.Count; i++)
                {

                    Organisation org = new Organisation(int.Parse(ids[i].InnerText), names[i].InnerText, addresses[i].InnerText);
                    Database.data.Add(org);

                }

                foreach (Organisation org in Database.data)
                {
                    directoryBox.Items.Add(org.name);

                }
            }
            catch
            {
                Response.Write("ERROR");
            }
        }
    }

XML确实有效,因为我能够使用textbox1.Items.Add(names [i] .InnerText)显示名称;

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我对发布的代码进行了两处更改。 1)我向Organization添加了一个没有参数的构造函数,使xml linq更简单。 2)我将ID从int更改为字符串,因为id在数字中有空格。

我怀疑你的xml有一个命名空间,这可能是你的代码没有工作的原因所以我使我的代码非常健壮,以处理没有命名空间和xml具有命名空间的情况。

&#13;
&#13;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml =
                "<Data>" +
                  "<Organisation>" +
                "<Name>Accident Compensation Corporation</Name>" +
                    "<ID> 022 12345678 </ID>" +
                    "<Address> 220 Bunny Street</Address>" +
                    "</Organisation>" +
                  "<Organisation>" +
                    "<Name>Test 2</Name>" +
                    "<Address> 50 Lambton Quay</Address>" +
                    "<ID> 021 8972468739 </ID>" +
                  "</Organisation>" +
                "</Data>";

            XElement data = XElement.Parse(xml);

            List<Organisation> organizations = new List<Organisation>();

            organizations = data.Descendants().Where(x => x.Name.LocalName == "Organisation").Select(y => new Organisation()
            {
                name = (string)y.Element("Name"),
                address = (string)y.Element("Address"),
                id = (string)y.Element("ID")
            }).ToList();

            
        }
    }
    public class Organisation
    {
        public string id;
        public string name;
        public string address;

        public Organisation() { }
        public Organisation(string id, string name, string address)
        {
            this.id = id;
            this.name = name;
            this.address = address;
        }
    }
}
&#13;
&#13;
&#13;