如何将XML文件读取到List<>;

本文关键字:List lt gt 读取 XML 文件 | 更新日期: 2023-09-27 18:27:13

我有一个List<>,我把它写进了一个XML文件中。现在我正在尝试读取同一个文件并将其写回List<>。有办法做到这一点吗?

如何将XML文件读取到List<>;

我认为最简单的方法是使用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);
}

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

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

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

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;
    }

是一种简单的方法

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();

    }
}

如果您正在使用Singleton模式,下面是如何将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"));
        }
    }