【发布时间】:2011-09-21 17:25:28
【问题描述】:
在过去的几个小时里,我一直在努力在 Windows Phone 7 上使用 LINQ to XML。我只是想将新元素添加到现有的 XML 文件中。
XElement newItem = new XElement("item",new XAttribute("id",3),
new XElement("content","Buy groceries"),
new XElement("status","false"));
IsolatedStorageFile isFile = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream stream = new IsolatedStorageFileStream("/Items.xml", System.IO.FileMode.Open, isFile);
XDocument loadedDoc = XDocument.Load(stream);
loadedDoc.Add(newItem);
loadedDoc.Save(stream);
一般来说,我遇到了非常奇怪的行为。有时我会收到错误消息“IsolatedStorageFileStream. 上不允许操作。”。有时是“缺少根元素”,有时是“意外的 XML 声明。XML 声明必须是文档中的第一个节点,之前不允许出现空白字符。”例如,如果我将 System.IO.FileMode.Open 更改为 Create,我会得到“缺少根元素”,但除此之外,似乎没有任何模式可以根据错误发生。
这一切似乎都是我的 XML 文件导致了问题:
<?xml version="1.0" encoding="utf-8" ?>
<items>
<item id="1">
<content>Get groceries</content>
<status>false</status>
</item>
<item id="2">
<content>Wash your car</content>
<status>true</status>
</item>
</items>
没有比这更简单的了,我绝对确定在实际 XML 文件中的声明之前没有任何空格。 为了让这一切变得更加奇怪,我下载了使用相同技术写入 XML 文件的小示例应用程序。当我尝试运行它时,我遇到了一个非常熟悉的错误:
意外的 XML 声明。 XML 声明必须是文档中的第一个节点,并且之前不允许出现空白字符。
昨天我安装了 Windows Phone SDK 7.1 BETA。这会导致问题吗?
似乎问题在于在隔离存储中定位 xml 文件。我在里面创建了全新的项目和新的 xml 文件。
这是我唯一的代码:
// Constructor
public MainPage()
{
InitializeComponent();
var isFile = IsolatedStorageFile.GetUserStoreForApplication();
var stream = isFile.OpenFile("file.xml", System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
}
我仍然得到:IsolatedStorageFileStream 上不允许操作。我已经尝试进入 file.xml 更改内置操作并复制到输出目录的属性,但这没有用。我尝试添加:
isFile.Dispose();
我也尝试添加条件语句:
if (isFile.FileExists("file.xml"))...
但他找不到文件。
我的生活从来没有这么困顿过。请告诉我我还能尝试什么。
【问题讨论】:
标签: c# xml linq windows-phone-7 windows-phone-7.1