LINQ to XML выбирает все значения из списка объектов, где находятся дочерние элементы и элементы внука - PullRequest
0 голосов
/ 06 декабря 2018

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

                   <trade>
                        <currentBalance>000000100</currentBalance>
                        <account>
                            <type>US</type>
                        </account>
                        <remark>
                            <code>CBG</code>
                            <type>somestring3</type>
                        </remark>
                    </trade>
                     <trade>
                        <currentBalance>000000200</currentBalance>
                        <remark>
                            <code>CBG</code>
                            <type>somestring2</type>
                        </remark>
                        <account>
                            <type>CA</type>
                        </account>
                    </trade>
                     <trade>
                        <currentBalance>000000300</currentBalance>
                        <remark>
                            <code>CBG</code>
                            <type>somestring1</type>
                        </remark>
                        <account>
                            <type>US</type>
                        </account>
                    </trade>

Я хотел бы выбрать все текущие балансы, для которых тип учетной записи - «США». Сначала я столкнулся с проблемами, поскольку существует два тега «type»,но я смог приблизиться к получению правильного запроса, выполнив следующие действия:

query = document.Descendants().Where(q => q.Name.LocalName == "trade")
                                            .Descendants().Where(r => r.Name.LocalName == "account")
                                            .Descendants().Where(s => s.Name.LocalName == "type")
                                            .Where(t => t.Value == "US").Select(q => q.Parent.Parent).ToList();

. Теперь у меня есть список из двух из трех сделок, на которые я нацелился, но как мне поступить на самом деле?просто получаю что-то, чтобы вернуть 000000100, 000000300

1 Ответ

0 голосов
/ 07 января 2019

Я добавил корневой элемент, чтобы XML можно было проанализировать как XDocument.

string xml = @"<root><trade>
                        <currentBalance>000000100</currentBalance>
                        <account>
                            <type>US</type>
                        </account>
                        <remark>
                            <code>CBG</code>
                            <type>somestring3</type>
                        </remark>
                    </trade>
                     <trade>
                        <currentBalance>000000200</currentBalance>
                        <remark>
                            <code>CBG</code>
                            <type>somestring2</type>
                        </remark>
                        <account>
                            <type>CA</type>
                        </account>
                    </trade>
                     <trade>
                        <currentBalance>000000300</currentBalance>
                        <remark>
                            <code>CBG</code>
                            <type>somestring1</type>
                        </remark>
                        <account>
                            <type>US</type>
                        </account>
                    </trade></root>";

Затем вы явно фильтруете тег типа в элементах trade / account и выбираете эти значения accountBalance.

var doc = XDocument.Parse(xml);            
          var balances = doc.Root.Elements("trade")
                                  .Where(x =>    
                                             x.Element("account")
                                              .Element("type")
                                              .Value == "US"
                                         )
                                         .Select(x => x.Element("currentBalance").Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...