Data binding 如何从Post方法响应解析xml字符串?
我有一个从Post方法返回的xml字符串:Data binding 如何从Post方法响应解析xml字符串?,data-binding,windows-phone-7,xml-parsing,Data Binding,Windows Phone 7,Xml Parsing,我有一个从Post方法返回的xml字符串: private static void GetResponseCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; // End the operation HttpWebResponse response = (HttpWebResponse)req
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
HttpStatusCode rcode = response.StatusCode;
var stream = new GZipInputStream(response.GetResponseStream());
using (StreamReader reader = new StreamReader(stream))
{
responseString = reader.ReadToEnd();
}
response.Close();
}
responseString是我想要解析的字符串,使用下面的parseXmlString类。但是,由于静态错误,我无法直接调用方法parseXmlString。如何将responseString传递给parseXmlString方法,让它们解析并绑定到listBox。或者无论如何,有相同的结果将是伟大的
void parseXmlString()
{
byte[] byteArray = Encoding.UTF8.GetBytes(responseString);
MemoryStream str = new MemoryStream(byteArray);
str.Position = 0;
XDocument xdoc = XDocument.Load(str);
var data = from query in xdoc.Descendants("tracks").Elements("item")
select new searchResult
{
artist = (string)query.Element("artist"),
album = (string)query.Element("album"),
track = (string)query.Element("track"),
// artistA = (string)query.Element("artists").Element("artist"),
};
// ListBox lb = new ListBox();
listBox1.ItemsSource = data;
var data1 = from query in xdoc.Descendants("artists").Elements("item")
select new searchResult
{
artistA = (string)query.Element("artist"),
};
listBox2.ItemsSource = data1;
}
你的方法是逆向逻辑。您知道可以在方法上有返回值,对吗?-) 您需要做的是让您的
ParseXmlString
方法将responseString
作为参数,并让它返回创建的IEnumerable
,如下所示:
private IEnumerable<SearchResult> ParseXmlString(responseString)
{
XDocument xdoc = XDocument.Load(responseString);
var data =
from query in xdoc.Descendants("tracks").Elements("item")
select new SearchResult
{
Artist = (string)query.Element("artist"),
Album = (string)query.Element("album"),
Track = (string)query.Element("track"),
};
return
from query in xdoc.Descendants("artists").Elements("item")
select new SearchResult
{
ArtistA = (string)query.Element("artist"),
};
}
如果您需要对回调有一些基本的了解,您可以看到这个答案:我应该将GetResponseAsync(…添加到哪里?正如我所说的,您需要重新编写异步代码以进行回调,这样您就可以在回调完成时收到通知。(还请记住,您需要使用
调度程序
,因为HttpWebRequest不在UI线程上运行)。如果需要了解回调如何工作,请阅读最后一个链接。
// This being your method to get the async response
GetResponseAsync(..., responseString =>
{
var searchResults = ParseXmlString(responseString);
listBox2.ItemsSource = searchResults;
})