2017-05-10 8 views
-1
 WebRequest request = WebRequest.Create(Url);  
     request.Method = "POST"; 

     string postData = "XML=" + System.Net.WebUtility.UrlEncode(req); 
     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = byteArray.Length; 
     Stream dataStream = request.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 
     WebResponse response = request.GetResponse(); 
     dataStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(dataStream); 
     string responseFromServer = reader.ReadToEnd(); 

     XmlDocument xmldoc = new XmlDocument(); 
     xmldoc.LoadXml(responseFromServer); 
     XmlNodeList HotelDetailsResponse = xmldoc.SelectNodes("/Details"); 
     XmlNodeList Hotels = xmldoc.GetElementsByTagName("School"); 
     foreach (XmlNode node in Hotels) 
     { 

     } 

i Problem mit dem obigen Code ist vor, während in .net Kernarbeits
können Sie bitte den Code nach .net Kern konvertierenwebrequest Implementierung in .net Kern

+1

Dies ist kein kostenloser Codierungsdienst, es ist eine Q/A-Site. Wenn Sie sich nicht bemühen, es selbst zu lösen, und uns Ihre Bemühungen mitteilen, und wo genau Sie ein Problem haben, sollten Sie nicht erwarten, dass Menschen Ihnen helfen – Tseng

Antwort

0

Sie Ihren Code in zwei aufspalten Teile - (1) HTTP-Antwortabruf und (2) Parsing.

Um Ihre XML-Antwort zu erhalten, können Sie eine solche Methode verwenden.

private async Task<string> GetXmlResponse(Uri uri, string postData) 
    { 
     using (var httpClient = new HttpClient()) 
     { 
      var response = await httpClient.PostAsync(uri, new StringContent(postData)); 
      if (!response.IsSuccessStatusCode) 
      { 
       throw new Exception($"Error: {response.StatusCode}"); // TODO use specific exception 
      } 

      return await response.Content.ReadAsStringAsync(); 
     } 
    } 

Und Ihre Hauptanalyseverfahren könnte die GetXmlResponse() Methode zuerst nennen, dann Antwort XDocument-Klasse analysieren. Als nächstes können Sie den Knoten School mit Linq abfragen und das Ergebnis durchlaufen.

// Mocked API returns "<xml><hotels><School>s1</School><School>s2</School></hotels></xml>" 
    var uri = new Uri("http://demo7162366.mockable.io/"); // TODO change to your URL 
    var postData = "XML=" + System.Net.WebUtility.UrlEncode("<xml></xml>"); // TODO change to your content 

    var xml = await GetXmlResponse(uri, postData); 

    var doc = XDocument.Parse(xml); 
    var hotelNodes = (from d in doc.Descendants() 
      where d.Name.LocalName == "School" 
      select d).ToList(); 

    foreach (var hotelNode in hotelNodes) 
    { 
      // TODO your logic 
    } 

I verwendet https://www.mockable.io API XML-Antwort zu verspotten.