Adding elements to an xml file in C#
You're close, but you want name to be an XAttribute
rather than XElement
:
XDocument doc = XDocument.Load(spath); XElement root = new XElement("Snippet"); root.Add(new XAttribute("name", "name goes here")); root.Add(new XElement("SnippetCode", "SnippetCode")); doc.Element("Snippets").Add(root); doc.Save(spath);
You need to create a new XAttribute
instead of XElement
. Try something like this:
public static void Test(){ var xdoc = XDocument.Parse(@" <Snippets> <Snippet name='abc'> <SnippetCode> testcode1 </SnippetCode> </Snippet> <Snippet name='xyz'> <SnippetCode> testcode2 </SnippetCode> </Snippet> </Snippets>"); xdoc.Root.Add( new XElement("Snippet", new XAttribute("name", "name goes here"), new XElement("SnippetCode", "SnippetCode")) ); xdoc.Save(@"C:\TEMP\FOO.XML");}
This generates the output:
<?xml version="1.0" encoding="utf-8"?><Snippets> <Snippet name="abc"> <SnippetCode> testcode1 </SnippetCode> </Snippet> <Snippet name="xyz"> <SnippetCode> testcode2 </SnippetCode> </Snippet> <Snippet name="name goes here"> <SnippetCode>SnippetCode</SnippetCode> </Snippet></Snippets>
If you want to add an attribute, and not an element, you have to say so:
XElement root = new XElement("Snippet");root.Add(new XAttribute("name", "name goes here"));root.Add(new XElement("SnippetCode", "SnippetCode"));
The code above produces the following XML element:
<Snippet name="name goes here"> <SnippetCode>SnippetCode</SnippetCode></Snippet>