Add new XElement to Xdocument
c#, nfc, windows-phone-8, xml
Solution
Try this:
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);
}
}
}
Problem
I have the following code, which successfully writes to an XML file. However, it overwrites each time because of the tagRegistry.Save() call being made. How can I add a new XElement to the existing file? At the moment the file is simply overwritten. ``` 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); } } } } ```