Чтение данных из XML - C# (197654)
Формулировка задачи:
Есть объект - продукт. У него есть свои свойства. Есть коллекция этих объектов.
Метод работает, продукты добавляет, но при записи нового, свойства старого, тоже меняются. В итоге я получаю коллекцию одинаковых продуктов - того который записан последним.
/// <summary> /// Метод реализующий загрузку продуктов из базы данных /// </summary> String LastNodeName = ""; ProductModel newProduct = new ProductModel(); public void LoadDataM() { using (XmlReader xml = XmlReader.Create("DataBaseProducts.xml")) { while (xml.Read()) { switch (xml.NodeType) { case XmlNodeType.Element: LastNodeName = xml.Name; break; case XmlNodeType.Text: if (LastNodeName == "name") { newProduct.Name = xml.Value; } else if (LastNodeName == "calories") { newProduct.Calories = Convert.ToDouble(xml.Value); } else if (LastNodeName == "proteins") { newProduct.Proteins = Convert.ToDouble(xml.Value); } else if (LastNodeName == "fats") { newProduct.Fats = Convert.ToDouble(xml.Value); } else if (LastNodeName == "carbohydrates") { newProduct.Carbohydrates = Convert.ToDouble(xml.Value); } else if (LastNodeName == "picturepath") { newProduct.PicturePath = xml.Value; } else if (LastNodeName == "weight") { newProduct.Weight = Convert.ToDouble(xml.Value); if (newProduct.Name != null & newProduct.Calories != 0 & newProduct.Proteins != 0 & newProduct.Fats != 0 & newProduct.Carbohydrates != 0 & newProduct.PicturePath != null & newProduct.Weight != 0) { DataProduct.Add(newProduct); } } break; } } } }
Решение задачи: «Чтение данных из XML»
textual
Листинг программы
class Program { static void Main(string[] args) { List<ProductModel> products = new List<ProductModel>(); using(XmlReader xml=XmlReader.Create("Products.xml")){ ProductModel product = null; while(xml.Read()){ switch (xml.NodeType) { case XmlNodeType.Element: if (xml.Name == "product") product = new ProductModel(); if (xml.Name == "name" || xml.Name == "calories") { string name = xml.Name; if (xml.Read() && xml.NodeType == XmlNodeType.Text && product != null) { string value = xml.Value; switch (name) { case "name": product.Name = value; break; case "calories": product.Calories = Double.Parse(value); break; } } } break; case XmlNodeType.EndElement: if (xml.Name == "product" && product != null) products.Add(product); break; } } } foreach (ProductModel product in products) Console.WriteLine(product); Console.ReadKey(); } } public class ProductModel { public string Name { get; set; } public double Calories { get; set; } public override string ToString() { return String.Format("{0}|{1}",Name,Calories); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д