2016-05-19 2 views
1

у меня есть этот XML-файл:Как я могу прочитать XML-файл вложенных узлов в C# и заполнить тот же XML-файл?

<?xml version="1.0" encoding="utf-8" ?> 
<Groups> 
    <Group> 
    <GroupId>1</GroupId> 
    <GroupName>11</GroupName> 
    <GroupExplanation>111</GroupExplanation> 
    <ImageSource>1111</ImageSource> 
    </Group> 
    <Group> 
    <GroupId>2</GroupId> 
    <GroupName>22</GroupName> 
    <GroupExplanation>222</GroupExplanation> 
    <ImageSource>2222</ImageSource> 
    </Group> 
    <Group> 
    <GroupId>3</GroupId> 
    <GroupName>33</GroupName> 
    <GroupExplanation>333</GroupExplanation> 
    <ImageSource>3333</ImageSource> 
    </Group> 
</Groups> 

и класс, который определяет его:

namespace RepositoryAndAccountingWebMVC.Models 
{ 
    [XmlRoot("Groups"), XmlType("Groups")] 
    public class Group 
    { 
     [XmlElement(ElementName = "GroupId")] 
     public int GroupId { get; set; } 

     [XmlElement(ElementName = "GroupName")] 
     public string GroupName { get; set; } 

     [XmlElement(ElementName = "GroupExplanation")] 
     public string GroupExplanation { get; set; } 

     [XmlElement(ElementName = "ImageSources")] 
     public string ImageSource { get; set; }    
    } 
} 

У меня есть список (ListGroups = новый список()). Как я могу заполнить список данными файла xml? и как сохранить новые записи группы в один файл?

ответ

1

Вам нужно добавить корневой элемент в вас модели:

[XmlRoot("Groups"), XmlType("Groups")] 
public class GroupRoot 
{ 
    [XmlElement(ElementName = "Group")] 
    public List<Group> Group { get; set; } 
} 

Затем вы можете загрузить XML с помощью:

 string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Groups><Group><GroupId>1</GroupId><GroupName>11</GroupName><GroupExplanation>111</GroupExplanation><ImageSource>1111</ImageSource></Group><Group><GroupId>2</GroupId><GroupName>22</GroupName><GroupExplanation>222</GroupExplanation><ImageSource>2222</ImageSource></Group><Group><GroupId>3</GroupId><GroupName>33</GroupName><GroupExplanation>333</GroupExplanation><ImageSource>3333</ImageSource></Group></Groups>"; 

     XmlSerializer serializer = new XmlSerializer(typeof(GroupRoot)); 

     TextReader reader = new StringReader(xml); 

     // Unserialize the root element and all children 
     var root = (GroupRoot)serializer.Deserialize(reader); 
     reader.Close(); 

     foreach (Group group in root.Group) { 
       // action on each group 
     } 

И, чтобы сохранить изменения от модели Xml:

 StringWriter writer = new StringWriter(); 
     serializer.Serialize(writer, root); 
     writer.Close();