当我从文件中删除XML
后尝试加载Element
文件时,会显示以下错误:Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it. Line 9, position 10.
我的代码出了什么问题?
这是我的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<booze>booze1</booze>
<booze>booze2</booze>
<booze>booze3</booze>
<booze>booze4</booze>
</data>
我的代码:
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("favorites.xml", FileMode.Open, file))
{
XDocument xDoc = XDocument.Load(stream, LoadOptions.None);
// delete node
xDoc.Descendants("data").Elements("booze").Where(x => x.Value == favorite).DescendantsAndSelf().Remove();
xDoc.Save(stream);
}
}
答案 0 :(得分:3)
我的猜测是,当你第一次运行代码时,删除成功,你的XDoc包含:
<?xml version="1.0" encoding="utf-8"?>
<data>
<booze>booze1</booze>
<booze>booze2</booze>
<booze>booze4</booze>
</data>
,但在调用XDoc.Save时,只需将其附加到 favorites.xml 文件即可。之后, favorites.xml 文件包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<booze>booze1</booze>
<booze>booze2</booze>
<booze>booze3</booze>
<booze>booze4</booze>
</data><?xml version="1.0" encoding="utf-8"?>
<data>
<booze>booze1</booze>
<booze>booze2</booze>
<booze>booze4</booze>
</data>
这就是为什么所有后续文件加载都会抛出错误的原因。你应该做的是覆盖文件,而不是附加到它。想到的第一种方法是关闭流,使用Mode.Truncate打开它,然后保存XDoc。或者您可以删除并重新创建该文件。我对IsolatedStorageFiles并不熟悉,所以这是一个疯狂的猜测。