C# windowsphone8c中的XML解析#
我想从以下url解析xml文件:“ 我可以使用以下代码获取XDocument:C# windowsphone8c中的XML解析#,c#,linq,xml-parsing,windows-phone-8,C#,Linq,Xml Parsing,Windows Phone 8,我想从以下url解析xml文件:“ 我可以使用以下代码获取XDocument: private void Search(object sender, RoutedEventArgs e) { string url = "http://restservice.schoolpundit.com/RestServiceImpl.svc/search_name/cvr"; WebClient twitter = new WebClient(); twitter.DownloadS
private void Search(object sender, RoutedEventArgs e)
{
string url = "http://restservice.schoolpundit.com/RestServiceImpl.svc/search_name/cvr";
WebClient twitter = new WebClient();
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted);
twitter.DownloadStringAsync(new Uri(url));
}
void twitter_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
return;
XDocument doc = XDocument .Parse(e.Result);
var list = from child in doc.Descendants("Institutions_search_name")
select new listrows {
inst_name=doc.Element("Inst_name").Value;
};
Listbox.ItemSource=list;
}
但是它没有显示任何Inst\u名称,实际上它没有输入doc.substands(“Institutions\u search\u name”),它也没有显示任何异常。如果我有任何错误,请更正我。我认为您只是缺少了名称空间-尽管您也在调用
doc.Element
而不是child.Element
。如果查看XML,您将在根元素中看到:
xmlns="http://schemas.datacontract.org/2004/07/RestService"
这意味着没有显式指定名称空间的每个元素都在该名称空间中
幸运的是,LINQ to XML使这一点非常容易处理:
XNamespace ns = "http://schemas.datacontract.org/2004/07/RestService";
var list = from child in doc.Descendants(ns + "Institutions_search_name")
select new listrows {
inst_name=child.Element(ns + "Inst_name").Value
};
虽然我可能不使用查询表达式:
XNamespace ns = "http://schemas.datacontract.org/2004/07/RestService";
var list = doc.Descendants(ns + "Institutions_search_name")
.Select(x => new listrows {
inst_name = child.Element(ns + "Inst_name").Value
});
事实上,考虑到您只选择了一个字符串,我将去掉listrows
位:
XNamespace ns = "http://schemas.datacontract.org/2004/07/RestService";
var list = doc.Descendants(ns + "Institutions_search_name")
.Select(x => child.Element(ns + "Inst_name").Value);
还要注意的是,
listrows
和inst_name
都违反了.NET命名约定-值得尝试与这些约定保持一致,以使您的代码更易于每个人阅读。您的代码不会在任何地方使用list
。。。它应该仍然会执行doc.subjects
方法,但是您没有对结果做任何操作。您是否在调试器中检查了解析本身是否成功?请注意,当实际属性被称为value
时,当您试图使用名为value
的属性时,当前代码甚至无法编译。给我们一些类似于您的代码的东西是没有意义的——您应该给我们实际的代码来演示这个问题。我编辑了问题“现在检查并告诉我解析xml的方法”。您还没有说明是否已在调试器中检查XDocument.parse
调用是否有效。(你问题中的代码格式糟糕透了。请花点力气让它可读,缩进一致,没有任何原因的大量垂直空白。)由于,你所展示的代码仍然无法编译顺便说一下,代码>在值之后。你真的应该想出一个简短但完整的例子,在提问之前可以逐字逐句地发布。我在inst_name=child.Element(ns+“inst_name”).Value中得到一个NullReference异常,但inst_name中有文本