【问题标题】:How to ready xml response result in c# or linq asp.net如何在 c# 或 linq asp.net 中准备好 xml 响应结果
【发布时间】:2019-05-16 07:26:17
【问题描述】:

下面是我的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

我更喜欢这个例子

Read attribute/value pairs from XML file using Linq

如果 linq 以外的任何其他方法也有帮助

【问题讨论】:

    标签: c# asp.net asp.net-mvc linq asp.net-web-api


    【解决方案1】:

    首先,您需要获取节点 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();
    

    输出:

    【讨论】:

      【解决方案2】:

      让我们简化代码并释放资源。

      无需创建额外的StreamReader

      所有 Disposable 对象都包含在 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 });
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 2015-07-14
        • 2015-10-29
        相关资源
        最近更新 更多