我试图将一个元素添加到IsolatedStorage中的XML文件中,但不是在根目录中添加它,而是复制文件并在最后添加:
<?xml version="1.0" encoding="utf-8"?>
<root>
<lampe id="1" nom="lampe1" content="Tables" header="Lampes de la cuisine" adresse="A1" />
<lampe id="2" nom="lampe2" content="Porte et garage" header="Lampe du jardin" adresse="C3" />
</root><?xml version="1.0" encoding="utf-8"?>
<root>
<lampe id="1" nom="lampe1" content="Tables" header="Lampes de la cuisine" adresse="A1" />
<lampe id="2" nom="lampe2" content="Porte et garage" header="Lampe du jardin" adresse="C3" />
<child attr="1">data1</child>
</root>
这是我使用的代码:
_xdoc = new XDocument();
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isoStore = new IsolatedStorageFileStream("lampes.xml", FileMode.Open, store))
{
_xdoc = XDocument.Load(isoStore);
int nextNumber = _xdoc.Element("root").Elements("lampe").Count() + 1;
XElement newChild = new XElement("lampe", "data" + nextNumber);
newChild.Add(new XAttribute("attr", nextNumber));
_xdoc.Element("root").Add(newChild);
_xdoc.Save(isoStore);
}
}
我在这里失踪了什么?
答案 0 :(得分:1)
读取和写入同一个文件并不是一个好主意。您的XML 构造正确,只是编写错误。
应该使用的一种方法是将文件写入其他位置(例如"lampe_tmp.xml"
),使用IsolatedStorageFile
的DeleteFile
API关闭并删除原始"lampe.xml"
,然后使用MoveFile
API将"lampe_tmp.xml"
复制到"lampe.xml"
。
using (IsolatedStorageFileStream isoStore = new IsolatedStorageFileStream("lampes_tmp.xml", FileMode.Open, store)) {
// the code from your post that modifies XML goes here...
}
IsolatedStorageFile.DeleteFile("lampes.xml");
IsolatedStorageFile.MoveFile("lampes_tmp.xml", "lampes.xml");
答案 1 :(得分:0)
您正在写入您从中读取的同一个流。当你开始写文件时,文件位置将位于文件的末尾,因此它将附加到文件中。
在写入之前重置流的位置,或者关闭流并打开一个新的流进行写入。