2015-09-05 55 views
1

我正在使用xmldocument讀取xml文件。 我使用xmlnodelist提取xml的節點。我想現在將xmlnodelist分配給「Project」對象列表。請讓我知道我該怎麼做。xmlnodelist到C#中的對象列表

<Projects> 
    <Project> 
    <Id>1</Id> 
    <Name>Fabric1</Name> 
    </Project> 
    <Project> 
    <Id>2</Id> 
    <Name>Fabric2</Name> 
    </Project> 
</Projects> 


Class : 
public class Project 
    { 
     public string Id { get; set; } 
     public string Name { get; set; } 
    } 


Code : 

    XmlDocument xdoc = new XmlDocument(); 
       xdoc.Load(Server.MapPath("~/Content/abc.xml")); 
       XmlNodeList listofProjests = xdoc.SelectNodes("/Projects/Project"); 
       var project = new List<Project>(); 

       foreach (XmlNode p in listofProjests) 
       { 
        ?? = p.SelectSingleNode("Id").InnerText; 
        ?? = p.SelectSingleNode("Name").InnerText; 
       } 
+0

你*有*使用'XmlDocument'嗎?如果你可以使用LINQ to XML('XDocument'等),這是微不足道的。 –

回答

1

正如我在評論指出的那樣,你可以在平凡LINQ這樣對XML:

var projects = XDocument 
    .Load(Server.MapPath("~/Content/abc.xml")) 
    .Root 
    .Elements("Project") 
    .Select(p => new Project { 
       Id = (string) p.Element("Id"), 
       Name = (string) p.Element("Name") 
      }) 
    .ToList(); 

我強烈建議你使用LINQ到XML,而不是舊XmlDocument API,如果你可以(現在,你真的應該能夠...)LINQ to XML已經出現了,時間長了long)。

當然,你可能你當前的代碼做到這一點:

foreach (XmlNode p in listofProjests) 
{ 
    string id = p.SelectSingleNode("Id").InnerText; 
    string name = p.SelectSingleNode("Name").InnerText; 
    project.Add(new Project { Id = id, Name = name }); 
} 

或稍多愉快(IMO):

foreach (XmlElement p in listofProjests) 
{ 
    string id = p["Id"].InnerText; 
    string name = p["Name"].InnerText; 
    project.Add(new Project { Id = id, Name = name }); 
} 

...但我真的不會。