将新XElement添加到Xdocument
本文关键字:Xdocument 添加 XElement 将新 | 更新日期: 2023-09-27 18:22:23
我有以下代码,它成功地写入了一个XML文件。但是,由于进行了tagRegistry.Save()调用,它每次都会覆盖。如何将新XElement添加到现有文件中?此时,文件被简单地覆盖。
public void saveTag()
{
if (File.Exists("/tagRegistry.xml"))
{
XElement tagRegistry = XElement.Load("/tagRegistry.xml");
XElement newTag = new XElement("Tag",
new XElement("tag", stringUid),
new XElement("name", desiredName),
new XElement("latitude", latitude),
new XElement("longitude", longitude));
tagRegistry.Add(newTag);
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (Stream stream = storage.CreateFile("/tagRegistry.xml"))
{
tagRegistry.Save(stream);
}
}
}
else
{
XDocument tagRegistry = new XDocument(new XElement("SmartSafe"));
tagRegistry.Element("SmartSafe").Add(new XElement("Tag",
new XElement("tag", stringUid),
new XElement("name", desiredName),
new XElement("latitude", latitude),
new XElement("longitude", longitude)));
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (Stream stream = storage.CreateFile("/tagRegistry.xml"))
{
tagRegistry.Save(stream);
}
}
}
}
试试这个:
public void saveTag()
{
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
XDocument document;
XElement tagRegistry = null;
if (storage.FileExists("/tagRegistry.xml"))
{
using(var stream = storage.OpenFile("/tagRegistry.xml", FileMode.Open))
{
document = XDocument.Load(stream);
}
tagRegistry = document.Descendants("SmartSafe").FirstOrDefault();
}
else
{
document = new XDocument();
}
if(tagRegistry == null)
{
tagRegistry = new XElement("SmartSafe");
document.Add(tagRegistry);
}
XElement newTag = new XElement("Tag",
new XElement("tag", stringUid),
new XElement("name", desiredName),
new XElement("latitude", latitude),
new XElement("longitude", longitude));
tagRegistry.Add(newTag);
using (Stream stream = storage.CreateFile("/tagRegistry.xml"))
{
document.Save(stream);
}
}
}
您的File.Exists
调用可能是错误的。您正在将文件存储到独立存储中,但正在从当前运行的目录中读取。所以你总是陷入else
块,每次都要写一个新文件。