Быстро сложить все значения определенного параметра в XML

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 364
Благодарностей
957
Баллы
113
Условно, есть XML с остатками товаров по складу вида:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE yml_catalog SYSTEM "shops.dtd"><yml_catalog date="2021-10-01T15:40:05+03:00"><shop><name>Site.ru</name><company>Site.ru</company><url>https://site.ru</url><platform>BSM/Yandex/Market</platform><version>2.0.7</version><currencies><currency id="RUR" rate="1"/></currencies><offers><offer id="14683412" available="true"><price>135</price><currencyId>RUR</currencyId><param name="Артикул">18155</param><param name="Доступное количество">4</param><barcode>4627102581558</barcode></offer><offer id="1468334" available="true"><price>135</price><currencyId>RUR</currencyId><param name="Артикул">81155</param><param name="Доступное количество">3</param><barcode>4607102583558</barcode></offer><offer id="146834" available="true"><price>135</price><currencyId>RUR</currencyId><param name="Артикул">8155</param><param name="Доступное количество">7</param><barcode>4607102581558</barcode></offer></offers></shop></yml_catalog>

У каждого товара есть параметр "Доступное количество". Есть вариант как-то разом, не прогоняя циклом по всему списку, сложить все эти числа, чтобы получить общее количество единиц товара на складе? Ведь после того как зенка распарсила XML, они у нее уже где-то "в памяти". Товаров десятки тысяч, не хочется "бегать по кругу" )))
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 804
Баллы
113
Есть вариант как-то разом, не прогоняя циклом по всему списку
Не хочется циклом? ОК, значит будет два :D

А если серьёзно, то я просто не смог придумать более элегантного решения (но чувствую, что оно есть):
C#:
int result = 0;
foreach (var offer in project.Xml.yml_catalog.shop.offers.offer)
{
    for (int i=offer.param.Count-1; i>=0;i--)
    {
        if (offer.param[i]["name"] == "Доступное количество")
        {
            result += Convert.ToInt32(offer.param[i].Value);
        }
    }
}

return result;
 
  • Спасибо
Реакции: Moonwalker

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)