XML提要的异步返回
本文关键字:异步 返回 XML | 更新日期: 2023-09-27 17:53:04
我试图在使用LINQ到XML的外部XML页面中执行数据的异步返回,然后执行每个循环(我希望为每个项目创建一个新页面,因此myData中的每个项目,新页面,新按钮,新标签等)
我想知道获得数据的最佳类型是什么,以便于执行foreach循环,以及如何做到这一点?
下面是我的XML示例。我知道在我的LINQ to XML中我需要使用名称空间,并且知道如何获得这些。
<category term="theoryDatabaseModel.questionTable" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:Id>1</d:Id>
<d:Text>This is sample XML Text</d:Text>
<d:ImageURL m:null="true" />
<d:CategoryId>3</d:CategoryId>
</m:properties>
</content>
我一直在使用以下代码将项目本地放入列表,但现在需要异步执行。
List<CategoryFeedItem> catfeedItems = (from categories in docu.Descendants(mm + "properties")
select new CategoryFeedItem()
{
CategoryId = categories.Descendants().ToList()[0].Value,
CategoryText = categories.Descendants().ToList()[1].Value,
}).ToList();
Thanks in advance
编辑:我用过这个方法,它很有效,把我带回列表框中。我可以用forEach解析这个数据,以某种方式把它分解成逐项?我也会看一下BackgroundWorker,谢谢你。
public class CategoryFeedItem
{
public string CategoryId { set; get; }
public string CategoryText { set; get; }
}
public class CategoryFeed
{
ListBox myCatContext;
public void LoadCatFeed(ListBox context)
{
myCatContext = context;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://mydatasource.svc"));
request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}
private static readonly XNamespace mm = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request =
(HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response =
(HttpWebResponse)request.EndGetResponse(asynchronousResult);
XDocument docu = XDocument.Load(response.GetResponseStream());
List<CategoryFeedItem> catfeedItems = (from categories in docu.Descendants(mm + "properties")
select new CategoryFeedItem()
{
CategoryId = categories.Descendants().ToList()[0].Value,
CategoryText = categories.Descendants().ToList()[1].Value,
}).ToList();
myCatContext.Dispatcher.BeginInvoke(() => { myCatContext.ItemsSource = catfeedItems; });
}
}
}
你可以简单地在BackgroundWorker中进行加载。