Использование Linq для значения элемента XDocument - PullRequest
0 голосов
/ 06 января 2020

У меня есть следующее в XML примере:

<custreply>
   <customer cid="1234">
     <ack id="6000" error="false">
       <info>
          <custgroup>A</custgroup>
          <message>cust created</message>
       </info>
       <info>
          <custgroup>A</custgroup>
          <message>cust setup created</message>
       </info>
     </ack>
   </customer>
   <customer cid="5678">
     <ack id="7000" error="true">
       <error>
          <class>B</class>
          <message>over the limit</message>
       </error>
     </ack>
   </customer>
</custreply>

Затем у меня есть XDocument и Linq, которые прекрасно работают для следующих двух значений, мне нужны ack id и ack error:

XDocument CustResponse = XDocument.Load('path');

var custAck = from c in CustResponse.Root.DescendantsAndSelf("ack")
                                   select new { CustId = c.Attribute("id").Value, Error = c.Attribute("error").Value
                                   };

То, что мне также нужно, - это выбрать ErrorMessage и для ошибки, показанной выше XML, если error = "true", значение элемента "message". Как я могу получить это? Я бы также принял сообщение об ошибке «ложь», если возможно, только первый элемент сообщения в первой информации, если проще, но мне нужны в основном сообщения об элементе ошибки в моих результатах, на самом деле не нужно сообщение об ошибке «ложь».

Спасибо всем

1 Ответ

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

Попробуйте следующее:

            XDocument CustResponse = XDocument.Load(FILENAME);

            var custAck = CustResponse.Root.DescendantsAndSelf("ack")
                .Select(c => new { 
                    CustId = (string)c.Attribute("id"), 
                    Error = (string)c.Attribute("error"),
                    messages = c.Descendants("message").Select(x => (string)x).ToList()

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