我的读取XML方法如下: public List<CompanyInfo>  ReadXML(string XMLFileName)
        {
            List<CompanyInfo> ComInfoList = new List<CompanyInfo>();
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.Load(XMLFileName);
            XmlNode XXX = XmlDoc.SelectSingleNode("MailInfomation");
            CompanyInfo ComInfo = new CompanyInfo();
            
            foreach (XmlNode XmlNo in XXX.ChildNodes)
            {
                XmlElement XmlEle=(XmlElement)XmlNo;
                ComInfo.CompanyNameStr = XmlEle.GetAttribute("CompanyName");
                ComInfo.NameCodeStr = XmlEle.GetAttribute("NameCode");
                ComInfo.ContactStr = XmlEle.GetAttribute("Contact");
                foreach (XmlNode XmlN in XmlNo.ChildNodes)
                {
                    ComInfo.MailStr = XmlN.InnerText;
                }
                int a = 0;//我跟踪调试过,每次运行到这里的时候,ComInfoList中的值全部被刚刚读取到的ComInfo的
//值重写了?搞不明白为什么?
                //ComInfoList.Insert(ComInfoList.Count, ComInfo);
                ComInfoList.Add(ComInfo);
            }
            return ComInfoList;
        }
结果我每次读完以后,List链表中全部存储为4个
<CompanyInfo CompanyName="Sina" NameCode="C723" Contact="Robert">
    <Mail>[email protected]</Mail>
</CompanyInfo>也就是最后一次读到的值把前面List中存储的值全部重写了,怎么会这样呢?请大侠赐教啊!!!
我的XML档案如下:<?xml version="1.0"?>
<!--This Supply Company Mail Information XML-->
<MailInfomation>
  <CompanyInfo CompanyName="Sina" NameCode="C723" Contact="Robert">
    <Mail>[email protected]</Mail>
  </CompanyInfo>
  <CompanyInfo CompanyName="Sina" NameCode="C723" Contact="Robert">
    <Mail>[email protected]</Mail>
  </CompanyInfo>
  <CompanyInfo CompanyName="Sina" NameCode="C723" Contact="Robert">
    <Mail>[email protected]</Mail>
  </CompanyInfo>
  <CompanyInfo CompanyName="Sina" NameCode="C723" Contact="Robert">
    <Mail>[email protected]</Mail>
  </CompanyInfo>
</MailInfomation>

解决方案 »

  1.   

    public List<CompanyInfo>  ReadXML(string XMLFileName)
            {
                List<CompanyInfo> ComInfoList = new List<CompanyInfo>();
                XmlDocument XmlDoc = new XmlDocument();
                XmlDoc.Load(XMLFileName);
                XmlNode XXX = XmlDoc.SelectSingleNode("MailInfomation");
            
                
                foreach (XmlNode XmlNo in XXX.ChildNodes)
                {
                    XmlElement XmlEle=(XmlElement)XmlNo;
                    CompanyInfo ComInfo = new CompanyInfo();
                    ComInfo.CompanyNameStr = XmlEle.GetAttribute("CompanyName");
                    ComInfo.NameCodeStr = XmlEle.GetAttribute("NameCode");
                    ComInfo.ContactStr = XmlEle.GetAttribute("Contact");
                    foreach (XmlNode XmlN in XmlNo.ChildNodes)
                    {
                        ComInfo.MailStr = XmlN.InnerText;
                    }                //ComInfoList.Insert(ComInfoList.Count, ComInfo);
                    ComInfoList.Add(ComInfo);
                }
                return ComInfoList;
            }因为你的List每次添加一个CompanyInfo对象,而你只创建了一个CompanyInfo对象,其实每次添加的都是同一个对象数据。我认为你应该在for循环中每次创建一个新的对象。
     个人观点,不曾调试,你可以试用一下,哈!希望能够帮到你!