我正在关注有关 windows phone 8 开发的教程,还有一个额外的练习要完成,但我在某个点上卡住了。我对 Silverlight 和 .Net 不是很有经验,所以我希望这不是一件小事。
基本上,我会阅读一个示例数据文件。该文件放置在应用程序的安装目录中。它是 xaml 格式的文件,我将使用 XmlReader 对其进行解析。我知道那些东西不是很好(已安装目录中的文件操作等),但我这样做是为了锻炼,因此我没有努力使它成为一个好的应用程序。
我的程序如下:首先,我将文件内容读入一个字符串,并将该字符串传递给 XmlReader。问题从这里开始。xmlReader 上的 Read() 函数在第 1 行第 1 列抛出异常。因此,我检查了“内容”字符串的值。在 Text Visualizer 窗口中,一切似乎都很正常,即内容字符串包含我放入输入文件的内容。但是当我在快速监视窗口中评估表达式 contents.ElementAt(0) 时,输出是一个 " 字符和 contents.ElementAt(1) 是一个 < 字符,我希望它是第 0 个元素。而且不够奇怪,当我在读取文件时删除第一个元素时(如注释掉的 contents.Remove(0,1) 所示,我没有得到异常。但是我在 Text Visualizer 中看到的是相同的。我可以继续我的练习方法,但我真的很想找出这种奇怪行为的原因。我认为这可能是 VS 调试器中的一个错误,但在这种情况下,我不应该在运行时遇到异常。
string contents;
try
{
StorageFolder localFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("SampleData");
StorageFile file = await localFolder.GetFileAsync(filename);
using (IRandomAccessStream textStream = await file.OpenReadAsync())
{
using (DataReader textReader = new DataReader(textStream))
{
uint length = (uint)textStream.Size;
await textReader.LoadAsync(length);
contents = textReader.ReadString(length);
//contents = contents.Remove(0, 1);
}
}
}
catch
{
contents = "TODO catch exception";
}
return contents;
xml解析:
string filePath = "SampleData.xaml";
string contents = await FileHelper.ReadFile(filePath);
// parse xaml string
using (XmlReader xmlReader = XmlReader.Create ( new StringReader (contents) ) )
{
try
{
while (xmlReader.Read())
{
string temp = xmlReader.ReadContentAsString();
}
}
catch (Exception e)
{
}
}