Как подготовить результат ответа XML в C # или linq asp.net - PullRequest
0 голосов
/ 15 декабря 2018

Ниже приведен мой результат ответа в формате xml,

<response uri="/recruit/private/xml/Candidates/addRecords">
 <result>
   <message>Record(s) added successfully</message>
     <recorddetail>
       <FL val="Id">316886000014241044</FL>
       <FL val="Created Time">2018-12-14 20:26:50</FL>
       <FL val="Modified Time">2018-12-14 20:26:50</FL>
       <FL val="Created By"><![CDATA[d Pvt Ltd]]></FL>
       <FL val="Modified By"><![CDATA[d Pvt Ltd]]></FL>
     </recorddetail>
  </result>
</response> 

Я использую приведенный ниже код для получения вывода

 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 string myResponse = "";
 using (System.IO.StreamReader sr = new 
 System.IO.StreamReader(response.GetResponseStream()))
 {
 myResponse = sr.ReadToEnd();
 }
 Response.Write(myResponse);

var xdoc = XDocument.Parse(myResponse);xdoc.Elements("response").Elements("result").Elements("message").Elements("recorddetail").Select(l => new Leads()
{
ID = (string)l.Elements("FL").Where(fl => (string)fl.Attribute("val") == "Id").FirstOrDefault(),
});

public class Leads
{

public string ID { get; set; }

}  

, но я получаю вывод из кода выше: ID= _Page

Я хочу два вывода, например, значение Id и значение сообщения, как показано ниже

 1)316886000014241044
 2)Record(s) added successfully

Я предпочитаю этот пример

Чтение атрибута / значенияпары из файла XML с использованием Linq

, если любой другой подход, кроме linq, также полезен

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Давайте упростим код и освободим ресурсы.

Нет необходимости создавать дополнительные StreamReader.

Все одноразовые объекты переносятся в using.

using (var response = (HttpWebResponse)request.GetResponse())
using (var responseStream = response.GetResponseStream())
{
    var xdoc = XDocument.Load(responseStream);

    var leads = xdoc.Root
        .Elements("result")
        .Elements("recorddetail")
        .Elements("FL")
        .Where(fl => fl.Attribute("val").Value == "Id")
        .Select(fl => new Leads { ID = fl.Value });
}
0 голосов
/ 15 декабря 2018

Сначала вам нужно получить потомков узла result, а затем для message вы должны прочитать узел message и выбрать его значение, а для id вы должны прочитать все узлы с именем FL соответствующим атрибутом.значение для Id и выберите его значение, например

XDocument doc = XDocument.Parse(myResponse);

var result = doc.Descendants("result");

string message = result.Elements("message").Select(x => (string)x)?.FirstOrDefault();
string id = result.Elements("recorddetail").Elements("FL").Where(x => x.Attribute("val").Value == "Id")?.FirstOrDefault()?.Value;

Console.WriteLine($"id: {id}");
Console.WriteLine($"message: {message}");

Console.ReadLine();

Выход:

enter image description here

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