Ответ 1
Лично я переключился с 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 node.
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;
}