【问题标题】:How do I extract an uri out of a XML response from an API如何从 API 的 XML 响应中提取 uri
【发布时间】:2017-05-08 13:01:07
【问题描述】:

我目前正在创建一个 API,它接受像“示例输入”这样的字符串作为输入参数。此 API 应该调用其他第三方 API,并传递与输入相同的值,例如

 https://thirdpartyhost/api/dept?name=sample+input

返回一个类似的xml

<lab:labs>
<lab uri="https://thirdpartyhost/api/dept/1">
 <name>sample input</name></lab>
</lab:labs>

我需要从 &lt;lab uri="https://thirdpartyhost/api/dept/1"&gt; 检索 uri,这将为我们提供所需的响应。

 public IHttpActionResult Get(string DeptName)
    {
        using (var client = new HttpClient())
        {
            string BaseURL = ConfigurationManager.AppSettings["BaseURL"];
            Uri uri = new Uri(BaseURL);
            client.BaseAddress = uri;
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
            var response = client.GetAsync("api/v2/dept?name=" +LabName).Result;
            if (response.IsSuccessStatusCode)
            {
                string responseString = response.Content.ReadAsStringAsync().Result;
            }
        }

我不确定如何从 API 的响应中提取 uri。非常感谢任何帮助

【问题讨论】:

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


    【解决方案1】:

    使用AngleSharp,可以进行如下操作:

    var xmlString = "<lab:labs><lab uri=\"https://thirdpartyhost/api/dept/1\"><name> sample input </name></lab></lab:labs>"
    var parser = new HtmlParser();
    var parsedXml = parser.Parse(xmlString);
    var extractedUri = parsedXml.QuerySelectorAll("lab").Attr("uri").FirstOrDefault();
    

    【讨论】:

      【解决方案2】:

      试试这个:

      string xmlString = @"<lab:labs>
          <lab uri=""https://thirdpartyhost//api//dept//1"">
              <name>sample input</name></lab>
          </lab:labs>".Replace("lab:labs>", "labs>");
      
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(xmlString);
      XmlNodeList nodes = doc.SelectNodes("labs//lab");
      
      if (nodes != null && nodes.Count > 0)
      {
          XmlNode node = nodes[0];
          if (node.Attributes["uri"] != null)
          {
              string uri = node.Attributes["uri"].Value.ToString();
          }
      }
      

      替换将删除您未使用的命名空间,xmlString 是您的响应字符串。

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 2021-05-03
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 2021-04-23
        • 2021-12-12
        • 2015-07-21
        • 1970-01-01
        相关资源
        最近更新 更多