我已经把问题单独成一个工程了
功能描述:
1、主界面两个Button“写入XML”和“加载XML”
2、“写入XML”调用“XMLHelper.AddItem();”
功能为:如果xml文档不存在就创建,并增加一个XElement;如果存在就直接增加一个XElement
(为了看到xml的结果用了MessageBox.Show())
public static void AddItem()
{
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isf.FileExists("xmlfile.xml"))
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("xmlfile.xml", FileMode.Open, FileAccess.ReadWrite, isf))
{
XDocument xdo = XDocument.Load(stream);
XElement _item = new XElement("file");//创建一个XML元素
XAttribute name = new XAttribute("name", "name");//创建一个XML属性
XAttribute duration = new XAttribute("duration", "duration");
_item.Add(name, duration);//将属性添加到 XML元素上
xdo.Element("files").Add(_item);
xdo.Save(stream);
MessageBox.Show(xdo.ToString());
}
}
else
{
XElement _items = new XElement("files");//创建一个XML元素
XElement _item = new XElement("file");//创建一个XML元素
XAttribute name = new XAttribute("name", "name");//创建一个XML属性
XAttribute duration = new XAttribute("duration", "duration");
_item.Add(name, duration);//将属性添加到 XML元素上
_items.Add(_item);
//用_item 新建一个XML的Linq文档
XDocument _doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), _items);
// XDocument.
//创建一个本地存储的文件流
IsolatedStorageFileStream location = new IsolatedStorageFileStream("xmlfile.xml", FileMode.Create, isf);
//将本地存储文件流转化为可写流
StreamWriter file = new StreamWriter(location);
//将XML文件 保存到流file上 即已经写入到手机本地存储文件上
_doc.Save(file);
MessageBox.Show(_doc.ToString());
file.Dispose();//关闭可写流
location.Dispose();//关闭手机本地存储流
}
}
}
3、“加载XML”调用“XMLHelper.GetItem();”
功能为:加载xml文档并进行相应操作(相应操作代码注释了),这里只将xml文档MessageBox.Show出来
public static void GetItem()
{
using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
XElement _xml;//定义Linq的XML元素
//打开本地存储文件
IsolatedStorageFileStream location = new IsolatedStorageFileStream("xmlfile.xml", FileMode.Open, storage);
//转化为可读流
StreamReader file = new StreamReader(location);
//解析流 转化为XML
try
{
_xml = XElement.Parse(file.ReadToEnd());
MessageBox.Show(_xml.ToString());
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
file.Dispose();
location.Dispose();
}
}
出现的问题:
1、点击“写入XML”,
MessageBox.Show()结果为:
<files>
<file name="name" duration="duration" />
</files>
2、点击“加载XML”
结果同上。
3、再次点击“写入XML”,
MessageBox.Show()结果为:
<files>
<file name="name" duration="duration" />
<file name="name" duration="duration" />
</files>
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 4, position 11.
我发现的问题:
(使用“WindowsPhonePowerTools”工具查看独立存储空间中的xml文件)
1、第一次“写入XML”时,xml文档如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<files>
<file name="name" duration="duration" />
</files>
2、第二次“写入XML”时,xml文档如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<files>
<file name="name" duration="duration" />
</files><?xml version="1.0" encoding="utf-8" standalone="yes"?>
<files>
<file name="name" duration="duration" />
<file name="name" duration="duration" />
</files>
看到上面的文档内容,异常的原因就很清楚了,但是却不知道问题产生原因。
这个问题是历史遗留问题没解决。。。这次又遇到了。。。求大家神助啊~~~