Выберите массив элементов XML на основе состояния дочернего элемента - PullRequest
0 голосов
/ 11 мая 2018

У меня есть какой-то XML, подобный следующему

<USTrades>
    <USTrade>
        <BalanceAmount>1000</BalanceAmount>
        <Narratives>
           <Narrative code="1" description="Code 1"/>
           <Narrative code="2" description="Code 2"/>
        </Narratives>
   </USTrade>
   <USTrade>
       <BalanceAmount>2000</BalanceAmount>
       <Narratives>
           <Narrative code="3" description="Code 3"/>
        </Narratives>
   </USTrade>
</USTrades>

Я хотел бы выбрать сумму сальдо, где код Нарратив не равен 3, поэтому мой результат с этим XML будет 1000. Код ниже выглядит, как будто он выбирает правильные Нарративы, но я не знаю, как затем выбрать правильного родителя на основе дочернего условия

var trades = document.Descendants("USTrades").Descendants("Narratives").Descendants("Narrative").Where(n => (string)n.Attribute("code") != "3");

1 Ответ

0 голосов
/ 11 мая 2018

Этот запрос дает желаемый результат:

var r = x.Elements("USTrades")
    .Elements("USTrade")
    .Where(e => e.Element("Narratives")
        .Elements("Narrative")
        .All(ee => ee.Attribute("code").Value != "3"))
    .Select(e => (int)e.Element("BalanceAmount"))
    .Sum();

Я проверил его с помощью следующего XML:

<USTrades>
    <USTrade>
        <BalanceAmount>1000</BalanceAmount>
        <Narratives>
           <Narrative code="1" description="Code 1"/>
           <Narrative code="2" description="Code 2"/>
        </Narratives>
   </USTrade>
   <USTrade>
       <BalanceAmount>2000</BalanceAmount>
       <Narratives>
           <Narrative code="3" description="Code 3"/>
        </Narratives>
   </USTrade>
   <USTrade>
       <BalanceAmount>3000</BalanceAmount>
       <Narratives>
           <Narrative code="4" description="Code 4"/>
        </Narratives>
   </USTrade>
</USTrades>

Здесь r - это 4000, в исходном XML это 1000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...