2015-01-07 34 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循環看起來像這樣。

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

再一次這個工作,我會用模型綁定替換字符串。任何幫助,將不勝感激

+0

按照類型。響應是一個字符串。所以,item只是字符串中的一個字符。 –

+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的更多細節。