Задача — получить из xml-файла все данные из тега offer
Я пробовал получить данные, но оно выдает мне все данные как обычный тест с тегами, а мне нужно получить данные из всех тегов.
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2018-05-23 12:00">
<shop>
<name>Кальченко Юрий</name>
<company>ГАЛС-С</company>
<url>http://www.leoton.ua/</url>
<currencies>
<currency id="UAH" rate="1" />
</currencies>
<categories>
<category id="1">Солнечные электростанции</category><!--Автономный инвертор ХТ (1.5кВт-10.0кВт)-->
<category id="2">Источники бесперебойного питания</category>
<category id="3">Измерительная техника</category><!--MPPT Контроллер заряда ИМПУЛЬС-3010S)-->
<category id="4">Пускозарядные устройства</category>
</categories>
<offers>
<offer available="true" id="3002">
<url>http://www.leoton.ua/ups-mx2-12-online.php</url>
<price>11040</price>
<currencyId>UAH</currencyId>
<categoryId>2</categoryId>
<picture>http://www.leoton.ua/images/mx/mx-1.jpg</picture>
<picture>http://www.leoton.ua/images/mx/mx-2.jpg</picture>
<picture>http://www.leoton.ua/images/mx/mx-3.jpg</picture>
<picture>http://www.leoton.ua/images/mx/mx-4.jpg</picture>
<name>Источники бесперебойного питания MX (MX2-12)</name>
<vendor>ГАЛС-С</vendor>
<description><![CDATA[
<p>ИБП МХ представляет собой наилучший способ защиты Вашего электрооборудования.</p>
<p>ON-Line</p>
<p>•Для серверов и телекоммуникационного оборудования</p>
<p>•Для Систем ТВ, аудио аппаратуры, ПК и серверов, сетевой аппаратуры</p>
<p>•Для газовых котлов всех типов</p>
<p>•Для Кофе-машин и бытовой аппаратуры</p>]]></description>
<param name="Напряжение АКБ, V">12V</param>
<param name="Мощность, кВт">1.0 кВт</param>
<param name="Пиковая мощность, кВт">1.5 кВт</param>
<param name="Зарядное устройство, А">до 90 А</param>
<param name="Страна-производитель">Украина</param>
<param name="Гарантия">1 год</param>
<stock_quantity>100</stock_quantity>
</offer>
<offer available="true" id="3006">
<url>http://www.leoton.ua/ups-mx3-online.php</url>
<price>19020</price>
<currencyId>UAH</currencyId>
<categoryId>2</categoryId>
<picture>http://www.leoton.ua/images/mx/mx-1.jpg</picture>
<picture>http://www.leoton.ua/images/mx/mx-2.jpg</picture>
<picture>http://www.leoton.ua/images/mx/mx-3.jpg</picture>
<picture>http://www.leoton.ua/images/mx/mx-4.jpg</picture>
<name>Источники бесперебойного питания MX (MX3-48)</name>
<vendor>ГАЛС-С</vendor>
<description><![CDATA[
<p>ИБП МХ представляет собой наилучший способ защиты Вашего электрооборудования.</p>
<p>ON-Line</p>
<p>•Для серверов и телекоммуникационного оборудования</p>
<p>•Для Систем ТВ, аудио аппаратуры, ПК и серверов, сетевой аппаратуры</p>
<p>•Для газовых котлов всех типов</p>
<p>•Для Кофе-машин и бытовой аппаратуры</p>]]></description>
<param name="Напряжение АКБ, V">48V</param>
<param name="Мощность, кВт">2.2 кВт</param>
<param name="Пиковая мощность, кВт">13.6 кВт</param>
<param name="Зарядное устройство, А">до 50 А</param>
<param name="Страна-производитель">Украина</param>
<param name="Гарантия">1 год</param>
<stock_quantity>100</stock_quantity>
</offer>
</offers>
</shop>
</yml_catalog>
C# код
XmlNodeList nodeoffer = xDoc.GetElementsByTagName("offer");
string offer = string.Empty;
foreach (XmlNode node in nodeoffer)
Console.WriteLine(offer=node.InnerText);
Для вашей задачи использование XmlDocument
— не лучший выбор, да и вообще это устаревший способ работы с XML. Если вам нужна большая часть данных из XML — лучше его десериализовать и потом работать уже с полноценными экземплярами классов, если вам из XML нужно извлечь сравнительно малую часть данных — используйте XDocument
(это более современная замена XmlDocument
, легковесная и с поддержкой LINQ).
Итак, десериализация. Гуглим "xml to c#", открываем первую ссылку: https://xmltocsharp.azurewebsites.net, вставляем в текстовое поле содержимое вашего XML и жмем Convert, полученный результат копируем в отдельный cs-файл, подправляем пространство имен на нужное нам. Можно вместо онлайн-ресурса воспользоваться встроенным в студию инструментом Edit > Paste Special > Paste XML As Classes, но он выдает более громоздкое представление (с backing fields).
Пишем код:
Yml_catalog catalog;
var serializer = new XmlSerializer(typeof(Yml_catalog));
using (var stream = File.OpenRead(path))
catalog = (Yml_catalog)serializer.Deserialize(stream);
// Модель можно переписать поудачнее,
// чтобы св-во Offers сразу было коллекцией
// Сделаете это самостоятельно
var offers = catalog.Shop.Offers.Offer;
foreach (var offer in offers)
{
Console.WriteLine(offer.Url);
Console.WriteLine(offer.Price);
Console.WriteLine(offer.CurrencyId);
...
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
вылезли ошибки, пробовал пере-импортировать пакеты все сразу и по отдельностиУдалось исправить с 76 до 34 ошибок
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме