我已经构建了一个完整的Windows Phone 7应用程序(我感到非常自豪!)但我刚刚意识到在我的应用程序中访问的XML文件没有真正的目的在我的网站上托管。由于他们从未真正需要更新,因此我认为仅仅包含作为项目的一部分更有意义。但是,我从中学到的大部分经验和教程都展示了如何在通过WebClient下载XML数据后将其解析为列表框。那么,有一种简单的方法可以用离线XML加载器替换WebClient吗?
这实际上是我的应用程序中有多少页面被编码,显然我为了简单起见,将一些特定于我的应用目的的名称更改为关于人/名字/年龄的废话。
namespace WindowsPhoneApplication14.Pages.Other
{
public partial class People : PhoneApplicationPage
{
public People()
{
InitializeComponent();
Dispatcher.BeginInvoke((Action)(() => pplListBox.ItemsSource = ppldata));
WebClient pplWebClient = new WebClient();
pplWebClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(ppl_DownloadStringCompleted);
pplWebClient.DownloadStringAsync(new Uri("http://www.mywebsite.com/ppl.xml"));
}
void ppl_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
return;
XElement xmlitem = XElement.Parse(e.Result);
var ppldata = new List<PeopleClass>();
foreach (XElement item in xmlitem.Elements("entry"))
{
var name = item.Element("name");
var namevalue = (name == null) ? null : name.Value;
var age = item.Element("age");
var agevalue = (age == null) ? null : age.Value;
ppldata.Add
(new PeopleClass
{
Name = namevalue,
Age = agevalue,
}
);
}
pplListBox.ItemsSource = ppldata;
}
public class PeopleClass
{
public string Name { get; set; }
public string Age { get; set; }
}
public System.Collections.IEnumerable ppldata { get; set; }
}
}
那么我可以换掉WebClient操作呢?
答案 0 :(得分:1)
您会注意到XDocument.Load有两组主要的覆盖。一个接受一个流(就像你在XElement.Parse(e.Result)中使用的那样),另一个接受XAP中XML文件的路径。
如果您的文档是静态的并且可以使用XAP发布,则可以使用后者。
我发布的这个样本就是这样的。