Как прочитать XML-файл и записать в список?

у меня есть List<> Что мне удалось записать в файл. Теперь я пытаюсь прочитать тот же файл и записать его обратно в List<>. Есть ли способ сделать это? Кто-нибудь может помочь мне с началом? Будет полезно?

5 ответов


Я думаю, что самый простой способ-использовать 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-файла и привязки его к списку.

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