2015-01-07 4 views
0

현재 외부 MVC 컨트롤러를 호출하고 XML을 전달하는 두 개의 매개 변수를 전달합니다. 결과 현재 내가 수행하는 작업은 다음과 같습니다. XML 사용 경험이 있는지 확인하십시오. 거의 0반환 된 XML 결과를 루프하고 값을 할당합니다.

try 
    { 
     var url = ConfigurationManager.AppSettings["url"] + String.Format("/ws/RetailerBrandsFiltered?postcode={0}&countryCode={1}", model.Postcode, model.SelectedCountry); 

     // Create the request to call the external mvc controller to retrieve the retailers 
     var req = (HttpWebRequest)WebRequest.Create(url); 
     req.Method = "GET"; 
     req.ContentType = "xml"; 

     // Do the request to external controller 
     var stIn = new StreamReader(req.GetResponse().GetResponseStream()); 
     var responce = stIn.ReadToEnd(); 

     foreach (var item in responce) 
     { 
      string urn = item["URN"].InnerText 
     } 

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
    } 

내가 응답을 통해 루프를 시도하고 XML 밖으로 노드 수와 (아직 구현하지 않은하는) 모델에 할당하지만 테스트를 위해 나는를 얻으려고하고있어 첫 번째 값을 문자열에 할당합니다.

어떤 메시지가 작동하지 않습니다. char 유형에 색인을 적용 할 수 없습니다. for for 루프는 이와 유사합니다.

foreach (var item in responce) 
{ 
    string urn = item["URN"].InnerText; 
    string name = item["NAME"].InnerText; 
    string address = item["ADDRESS"].InnerText; 
} 

다시 한번 이것이 작동하면 모델 바인딩으로 문자열을 대체합니다. 모든 도움을 주실 수 있습니다

+0

유형을 따릅니다. responce는 문자열입니다. 따라서 항목은 문자열의 문자 일뿐입니다. –

+0

@JustinPihony 무슨 뜻인지 미안해? –

+0

https://stackoverflow.com/questions/4842038/streamreader-and-reading-an-xml-file이 문제를 해결해야합니다. 지금 당장 당신은 평범한 문자열을 읽고 있습니다. –

답변

1

변수 reponce은 문자열이고 반복 할 때 암시 적으로 문자열을 char[]으로 캐스팅하고이를 반복합니다.

로드합니다 XDocument 얻을 Linq에를 사용하는 값으로 스트림 :

try 
{ 
    var url = ConfigurationManager.AppSettings["url"] + string.Format("/ws/RetailerBrandsFiltered?postcode={0}&countryCode={1}", model.Postcode, model.SelectedCountry); 

    // Create the request to call the external mvc controller to retrieve the retailers 
    var req = (HttpWebRequest)WebRequest.Create(url); 
    req.Method = "GET"; 
    req.ContentType = "xml"; 

    // Do the request to external controller 
    var xDoc = XDocument.Load(req.GetResponse().GetResponseStream()); 

    // Get some nodes 
    var items = xDoc.Descendants("item"); 

    foreach(var item in items) 
    { 
     string urn = item.Element("URN").Single().Value; 
     // Do more stuff 
    } 

} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex); 
} 

괜찮다 MSDN article 및 자세한 내용은이 Stack Overflow question.