我正在尝试开发Windows 7手机,我正在使用我需要解析的XML文件,然后执行Linq查询。
问题在于:
每当我尝试访问该文件(它存储在本地)时,它都会返回一个错误,指出该文件无法找到,因为它不是XAP包的一部分。
我尝试了另一种使用StreamReader
的解决方案但是我仍然遇到类似的错误:
尝试访问方法失败System.IO.File.OpenText(System.String)
以下是我正在使用的代码:
using (StreamReader reader = File.OpenText("C:/Users/Desktop/Assign/obj/Debug/buildings.kml"))
{
var xdoc = XDocument.Load ("buildings.kml");
XNamespace kml = "http://www.opengis.net/kml/2.2";
var dict = xdoc.Descendants(kml + "Placemark")
.ToDictionary(d => d.Element(kml + "name").Value,
d => d.Element(kml + "id").Value);
foreach (var b in dict) {
Console.WriteLine ("Building Name -> " + b.Key + " Building ID -> " + b.Value);
}
}
该文件位于:> C:/Users/Desktop/Assign/obj/Debug/buildings.kml所以我看不出问题。在Visual Studio之外,我可以正确读取.xml文件。
希望有人可以提供帮助
编辑:
新代码 -
Dictionary<string, string> getBuildingNames()
{
Uri uri = new Uri(@"Data\mydata.kml", UriKind.Relative);
StreamResourceInfo sri = Application.GetResourceStream(uri);
StreamReader sr = new StreamReader(sri.Stream);
var xdoc = XDocument.Load(sr);
XNamespace kml = "http://www.opengis.net/kml/2.2";
var dict = xdoc.Descendants(kml + "Placemark")
.ToDictionary(d => d.Element(kml + "name").Value,
d => d.Element(kml + "id").Value);
return dict;
}
错误: - 'NullReferenceException未被取消'
答案 0 :(得分:4)
假设您确实尝试将此作为WP7项目的一部分(而不是与之相关的某些非移动项目,例如预处理),您不应该使用File.OpenText
。
选项:
Application.GetResourceStream
读取该文件(请参阅此blog post for details)Assembly.GetManifestResourceStream
。答案 1 :(得分:1)
还有一些提示可以帮助您:
1)将xml文件的Build action属性更改为“Content”。 (选择文件并转到Visual Studio中的属性窗口)
2)如果您只想从文件中读取,则无需将文件保存在IsolatedStorage中。如果正确设置了Build Action属性,则可以直接读取它。
您可以使用XDocument读取文件。
XDocument xdoc = XDocument.Load(filepath);
其中 filepath 只是XML文件的相对路径,即如果你没有将它放在项目的任何文件夹中那么它就只是文件名(假设它就像是根文件名)目录)