Если под «эффективным» вы подразумеваете «проще в обслуживании», вы можете попробовать эту технику:
static void SetItem(string XMLInformation, string newText, XElement document)
{
((XElement)document.DescendantNodes().Last(x =>
x.NodeType == System.Xml.XmlNodeType.Element
&& ((XElement)x).Name == XMLInformation)).SetValue(newText);
}
static void SetElementItem(string XMLInformation, string elementItem, string newText, XElement document)
{
((XElement)document.DescendantNodes().Last(x =>
x.NodeType == System.Xml.XmlNodeType.Element
&& ((XElement)x).Name == XMLInformation)).SetElementValue(elementItem, newText);
}
static void AddNewElement(string XMLInformation, string elementItem, XElement document)
{
((XElement)document.DescendantNodes().Last(x =>
x.NodeType == System.Xml.XmlNodeType.Element
&& ((XElement)x).Name == XMLInformation)).Add(new XElement(elementItem);
}
... и тогда вы сделаете это
var xmlDoc = XElement.Load("XmlFile.xml");
SetItem("Name", "iPod", xmlDoc);
SetItem("ProductId", "123456", xmlDoc);
SetElementItem("Add", "Type", "Plastic", xmlDoc);
SetElementItem("Add", "Information", "24 Carat", xmlDoc);
//loop as needed
AddNewElement("DetailList", "Add", xmlDoc);
SetElementItem("Add", "Type", "Fabric", xmlDoc);
SetElementItem("Add", "Information", "Rogh", xmlDoc);