Лично я перешел с XMLReader на System.XML.Linq.XDocument, чтобы управлять своими файлами данных XML. Таким образом, я могу легко извлекать данные из XML в объекты и управлять ими, как и любой другой объект в моей программе. Когда я закончу с ними, я могу в любое время сохранить изменения обратно в файл xml.
//Load my xml document
XDocument myData = XDocument.Load(PhysicalApplicationPath + "/Data.xml");
//Create my new object
HelpItem newitem = new HelpItem();
newitem.Answer = answer;
newitem.Question = question;
newitem.Category = category;
//Find the Parent Node and then add the new item to it.
XElement helpItems = myData.Descendants("HelpItems").First();
helpItems.Add(newitem.XmlHelpItem());
//then save it back out to the file system
myData.Save(PhysicalApplicationPath + "/Data.xml");
Если я хочу использовать эти данные в легко управляемом наборе данных, я могу связать их со списком своих объектов.
List<HelpItem> helpitems = (from helpitem in myData.Descendants("HelpItem")
select new HelpItem
{
Category = helpitem.Element("Category").Value,
Question = helpitem.Element("Question").Value,
Answer = helpitem.Element("Answer").Value,
}).ToList<HelpItem>();
Теперь его можно передавать и манипулировать любыми внутренними функциями моего класса объектов.
Для удобства мой класс имеет функцию для создания себя в качестве узла xml.
public XElement XmlHelpItem()
{
XElement helpitem = new XElement("HelpItem");
XElement category = new XElement("Category", Category);
XElement question = new XElement("Question", Question);
XElement answer = new XElement("Answer", Answer);
helpitem.Add(category);
helpitem.Add(question);
helpitem.Add(answer);
return helpitem;
}