I've got an XML file which I use to create objects, change the objects, then save the objects back into the XML file.
What do I have to change in the following code so that it extracts a node from the XML based on the id, replaces that node with the new one, and saves it back into the XML?
The following gives me 'System.Xml.Linq.XElement' does not contain a constructor that takes '0' arguments':
//GET ALL SMARTFORMS AS XML
XDocument xmlDoc = null;
try
{
xmlDoc = XDocument.Load(FullXmlDataStorePathAndFileName);
}
catch (Exception ex)
{
HandleXmlFileNotFound(ex);
}
//EXTRACT THE NODE THAT NEEDS TO BE REPLACED
XElement oldElementToOverwrite = xmlDoc.Descendants("smartForm")
.Where(sf => (int)sf.Element("id") == 2)
.Select(sf => new XElement());
//CREATE THE NODE THAT WILL REPLACE IT
XElement newElementToSave = new XElement("smartForm",
new XElement("id", this.Id),
new XElement("idCode", this.IdCode),
new XElement("title", this.Title)
);
//OVERWRITE OLD WITH NEW
oldElementToOverwrite.ReplaceWith(newElementToSave);
//SAVE XML BACK TO FILE
xmlDoc.Save(FullXmlDataStorePathAndFileName);
XML file:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<smartForm>
<id>1</id>
<whenCreated>2008-12-31</whenCreated>
<itemOwner>system</itemOwner>
<publishStatus>published</publishStatus>
<correctionOfId>0</correctionOfId>
<idCode>customerSpecial</idCode>
<title>Edit Customer Special</title>
<description>This form has a special setup.</description>
<labelWidth>200</labelWidth>
</smartForm>
<smartForm>
<id>2</id>
<whenCreated>2008-12-31</whenCreated>
<itemOwner>system</itemOwner>
<publishStatus>published</publishStatus>
<correctionOfId>0</correctionOfId>
<idCode>customersMain</idCode>
<title>Edit Customer</title>
<description>This form allows you to edit a customer.</description>
<labelWidth>100</labelWidth>
</smartForm>
<smartForm>
<id>3</id>
<whenCreated>2008-12-31</whenCreated>
<itemOwner>system</itemOwner>
<publishStatus>published</publishStatus>
<correctionOfId>0</correctionOfId>
<idCode>customersNameOnly</idCode>
<title>Edit Customer Name</title>
<description>This form allows you to edit a customer's name only.</description>
<labelWidth>100</labelWidth>
</smartForm>
</root>