Имею XML с сложной структурой (CommerceML) и нужно выпарсить некоторые значения оттуда.
К примеру, получаю значения так:
var importFile = XDocument.Load("import/import.xml");
var modelElement = importFile.Element("КоммерческаяИнформация").Element("Каталог")
.Element("Товары");
var models = modelElement.Descendants("Товар")
.Select(s => new
{
name = s.Element("Наименование").Value,
id=s.Element("Ид").Value,
options = s.Element("ЗначенияСвойств")?.Elements("ЗначенияСвойства").Elements("Значение")
});
var str = new StreamWriter("items.txt");
foreach (var model in models)
{
str.WriteLine(model.id);
str.WriteLine(model.name);
str.WriteLine(model.options);
str.WriteLine("-----------");
}
str.Close();
В option записываются множественные значения вида:
<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>eb7b1638-5e47-11e2-9059-002590640ee1</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>cb031671-4f35-11e7-9400-00155d30fd2b</Ид>
<Значение>30 кг</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>afdfec66-107a-11e3-83e3-002590a3520f</Ид>
<Значение>10 ч</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd87-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>85 см</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>c66b051e-5bc4-11e2-9bfe-002590640ee1</Ид>
<Значение>1 год</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd8b-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>58 см</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd75-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>177 кВт-ч/год</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>eb7b1634-5e47-11e2-9059-002590640ee1</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>2d7c5329-c591-11e5-89a8-00155d5d680b</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd50-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>свободностоящее</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd77-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>A+</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>06a864d3-597a-11e2-9cb6-002590640ee1</Ид>
<Значение>N, ST</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>1f1e3ced-f570-11e8-80c0-000c291f7f49</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd62-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>1</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd83-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>4</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>4d64983a-e950-11e8-80bf-000c291f7f49</Ид>
<Значение>морозильник</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>2d7c5358-c591-11e5-89a8-00155d5d680b</Ид>
<Значение>4 кг/сут</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>bee2b197-5985-11e2-9cb6-002590640ee1</Ид>
<Значение>92 л</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>bee2b198-5985-11e2-9cb6-002590640ee1</Ид>
<Значение>92 л</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>1db760f7-f576-11e8-80c0-000c291f7f49</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>2d7c530a-c591-11e5-89a8-00155d5d680b</Ид>
<Значение>есть</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>4cd8e65a-d091-11e5-887f-00155d5d680b</Ид>
<Значение>85 л</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>4cd8e669-d091-11e5-887f-00155d5d680b</Ид>
<Значение>85 л</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>4cd8e6a7-d091-11e5-887f-00155d5d680b</Ид>
<Значение>снаружи</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>afdfec63-107a-11e3-83e3-002590a3520f</Ид>
<Значение>встроенные</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>3065fb76-596b-11e2-9cb6-002590640ee1</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>275b88e2-c591-11e5-89a8-00155d5d680b</Ид>
<Значение>без No Frost</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>56209cd1-38a0-11e3-8dfd-002590a3520f</Ид>
<Значение>10 лет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd85-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>27a475fb-c104-11e5-b793-00155d5d680b</Ид>
<Значение>механическое</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd79-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>42 дБ</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>4f9ea9bd-a721-11e2-ab4e-002590640ee1</Ид>
<Значение>R600a (изобутан)</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>5c118c42-c903-11e6-945d-00155d30fd20</Ид>
<Значение>белый</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>0844cd89-5962-11e2-9cb6-002590640ee1</Ид>
<Значение>55 см</Значение>
</ЗначенияСвойства>
</ЗначенияСвойств>
Как мне получить на выходе данные которые содержат Значение? У Elements нет метода Value
Не совсем понятно что вам нужно, но словарь с помощью Linq можно получить так:
var xml = @"<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>eb7b1638-5e47-11e2-9059-002590640ee1</Ид>
<Значение>нет</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>cb031671-4f35-11e7-9400-00155d30fd2b</Ид>
<Значение>30 кг</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Ид>afdfec66-107a-11e3-83e3-002590a3520f</Ид>
<Значение>10 ч</Значение>
</ЗначенияСвойства>
...
</ЗначенияСвойств>";
var root = XElement.Parse(xml);
var dict = root.Elements("ЗначенияСвойства")
.ToDictionary(e => e.Element("Ид").Value, e => e.Element("Значение").Value);
Console.WriteLine(dict["2d7c5358-c591-11e5-89a8-00155d5d680b"]);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сделал такую конструкцию, для добавления данных в базу, вопрос, Правильно ли написан запрос, и если учитывать то, что это цикл, будет ли эффективным...