Чтение данных из 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);
}
}