web-dev-qa-db-fra.com

Comment lire un fichier XML et l'écrire dans List <>?

J'ai un List<> que j'ai réussi à écrire dans le fichier. Maintenant, j'essaie de lire le même fichier et de l'écrire dans List<>. Y a-t-il une méthode pour le faire? Quelqu'un peut-il m'aider avec le début? Sera utile?

8
Nisha

Je pense que le moyen le plus simple est d'utiliser la variable 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);
}
8
Enyra

Vous pouvez essayer ceci (en utilisant System.Xml.Linq)

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

vous pouvez utiliser LINQ to XML pour lire votre fichier XML et le lier à votre liste.

http://www.mssqltips.com/sqlservertip/1524/reading-xml-documents-using-linq-to-xml/ ce lien contient suffisamment d'informations à ce sujet.

c'est quelque chose que j'ai fait dans le passé; J'espère que ça aide. Je pense que tu veux exactement la même chose

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

Un moyen facile est

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


    }
}
4
PraveenVenu

Si vous travaillez avec le modèle Singleton, voici comment lire du code XML dedans!

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

Cela ouvre l’accessibilité CRUD, la mise à jour est un peu délicate car elle écrit au format 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"));
        }
    }
0
TheZenTeaAlmighty