【问题标题】:How to read XML file into List<>?如何将 XML 文件读入 List<>?
【发布时间】:2012-03-08 14:36:54
【问题描述】:

我有一个List&lt;&gt;,我将它写入了一个 XML 文件。 现在我正在尝试读取同一个文件并将其写回List&lt;&gt;。 有没有办法做到这一点?

【问题讨论】:

标签: c# xml


【解决方案1】:

我认为最简单的方法是使用XmlSerializer

XmlSerializer serializer = new XmlSerializer(typeof(List<MyClass>));

using(FileStream stream = File.OpenWrite("filename"))
{
    List<MyClass> list = new List<MyClass>();
    serializer.Serialize(stream, list);
}

using(FileStream stream = File.OpenRead("filename"))
{
    List<MyClass> dezerializedList = (List<MyClass>)serializer.Deserialize(stream);
}

【讨论】:

    【解决方案2】:

    你可以试试这个(使用 System.Xml.Linq)

    XDocument xmlDoc = XDocument.Load("yourXMLFile.xml");
    var list = xmlDoc.Root.Elements("id")
                               .Select(element => element.Value)
                               .ToList();
    

    【讨论】:

    【解决方案3】:

    您可以使用 LINQ to XML 读取您的 XML 文件并将其绑定到您的列表。

    http://www.mssqltips.com/sqlservertip/1524/reading-xml-documents-using-linq-to-xml/这个链接有足够的信息。

    这是我过去做过的事情;我希望它有所帮助。我认为你想要完全相同的东西

        public static List<ProjectMap> MapInfo()
         {
    
             var maps = from c in XElement.Load(System.Web.Hosting.HostingEnvironment.MapPath("/ProjectMap.xml")).Elements("ProjectMap")
                         select c;
             List<ProjectMap> mapList = new List<ProjectMap>();
    
             foreach (var item in maps)
             {
                 mapList.Add(new ProjectMap() { Project = item.Element("Project").Value, SubProject = item.Element("SubProject").Value, Prefix = item.Element("Prefix").Value, TableID = item.Element("TableID").Value  });
    
             }
             return mapList;
        }
    

    【讨论】:

      【解决方案4】:

      一个简单的方法是

      using System;
      using System.Linq;
      using System.Xml.Linq;
      
      public class Test
      {
          static void Main()
          {
              string xml = "<Ids><id>1</id><id>2</id></Ids>";
      
              XDocument doc = XDocument.Parse(xml);
      
              List<string> list = doc.Root.Elements("id")
                                 .Select(element => element.Value)
                                 .ToList();
      
      
          }
      }
      

      【讨论】:

        【解决方案5】:

        如果您正在使用单例模式,这里是如何将 XML 读入其中!

        public static GenericList Instance {
        
                get {
        
                        XElement xelement = XElement.Load(HostingEnvironment.MapPath("RelativeFilepath"));
                        IEnumerable<XElement> items = xelement.Elements();
                        instance = new GenericList();
                        instance.genericList = new List<GenericItem>{ };
        
                        foreach (var item in items) {
        
                            //Get the value of XML fields here
                            int _id = int.Parse(item.Element("id").Value);
                            string _name = item.Element("name").Value;
        
                            instance.genericList.Add(
                                          new GenericItem() {
        
                                              //Load data into your object
                                              id = _id,
                                              name = _name
                                          });   
                            }
                    return instance;
                }
            }
        

        这打开了 CRUD 可访问性,更新在写入 xml 时有点棘手

            public void Save() {
        
                XDocument xDoc = new XDocument(new XDeclaration("Version", "Unicode type", null));
                XElement root = new XElement("GenericList");
                //For this example we are using a Schema to validate our XML
                XmlSchemaSet schemas = new XmlSchemaSet();
                schemas.Add("", HostingEnvironment.MapPath("RelativeFilepath"));
        
                foreach (GenericItem item in genericList) {
        
                    root.Add(
                        //Assuming XML has a structure as such
                        //<GenericItem>
                        //  <name></name>
                        //  <id></id>
                        //</GenericItem>
        
                        new XElement("GenericItem",                        
                                new XElement("name", item.name),
                                new XElement("id", item.id)
                        ));
                }
                xDoc.Add(root);
        
                //This is where the mentioned schema validation takes place
                string errors = "";
                xDoc.Validate(schemas, (obj, err) => {
                    errors += err.Message + "/n";
                });
        
                StringWriter writer = new StringWriter();
                XmlWriter xWrite = XmlWriter.Create(writer);
                xDoc.Save(xWrite);
                xWrite.Close();
        
                if (errors == "")
                {
                    xDoc.Save(HostingEnvironment.MapPath("RelativeFilepath"));
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-21
          • 2021-11-24
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          相关资源
          最近更新 更多