2012-03-08 179 views
8

私はファイルに書き込むことができたList<>を持っています。 今、同じファイルを読んで、List<>に書き戻そうとしています。 これを行う方法はありますか? 誰も私のスタートを助けることができますか? 有用でしょうか?XMLファイルを読み込んでList <>に書き込む方法は?

+0

http://stackoverflow.com/questions/670563/linq-to-read-xml同様の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アクセシビリティを開きますが、更新はちょっとトリッキーなのです質問がありますか? – AnarchistGeek

+0

お試しください http://stackoverflow.com/questions/4084393/how-to-read-xml-file-to-a-dictarystring-liststring-with-empty-strings- – PraveenVenu

答えて

9

でまったく同じこと

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

LINQ to XMLを使用してXMLファイルを読み取り、それをリストにバインドすることができます。

http://www.mssqltips.com/sqlservertip/1524/reading-xml-documents-using-linq-to-xml/このリンクには十分な情報があります。

これは過去に行ったことです。私はそれが助けて欲しい

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

したい私は、最も簡単な方法は、XmlSerializerを使用することだと思うと思いますSystem.Xml.Linq)

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

あなたが使用して(これを試すことができます:私はあなたが簡単な方法は、

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


    } 
} 
+0

LinqからXMLに同意するが、私はこれらの例に従った。http://www.dotnetcurry.com/linq/564/linq-to-xmチュートリアル - 例。 – Caverman

0

シングルトンのパターンを使って作業しているなら、ここに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")); 
     } 
    } 
関連する問題