Ma Eb
Ma Eb

Reputation: 53

how can append to xml

i have this xml.

<project>
   <user>
      <id>1</id>
      <name>a</name>
   </user>
   <user>
      <id>2</id>
      <name>b</name>
  </user>
 </project>

now how can append a new element like this between element <project></project>

<user>
   <id>3</id>
   <name>c</name>
</user>

Upvotes: 4

Views: 202

Answers (3)

Samer_Azar
Samer_Azar

Reputation: 433

If you have the below XML file:

<CATALOG>
  <CD>
    <TITLE> ... </TITLE>
    <ARTIST> ... </ARTIST>
    <YEAR> ... </YEAR>
  </CD>
</CATALOG>

and you have to add another <CD> node with all its child nodes:

using System.Xml; //use the xml library in C#
XmlDocument document = new XmlDocument(); //creating XML document
document.Load(@"pathOfXmlFile"); //load the xml file contents into the newly created document
XmlNode root = document.DocumentElement; //points to the root element (catalog)
XmlElement cd = document.CreateElement("CD"); // create a new node (CD)

 XmlElement title = document.CreateElement("TITLE");
 title.InnerXML = " ... "; //fill-in the title value
 cd.AppendChild(title); // append title to cd
 XmlElement artist = document.CreateElement("ARTIST");
 artist.InnerXML = " ... "; 
 cd.AppendChild(artist);
 XmlElement year = document.CreateElement("YEAR");
 year.InnerXML = " ... "; 
 cd.AppendChild(year);

root.AppendChild(cd); // append cd to the root (catalog)

document.save(@"savePath");//save the document

Upvotes: 1

kaj
kaj

Reputation: 5251

If you mean using C# then probably the simplest way is to load the xml up into an XmlDocument object and then add a node representing the additional element.

e.g. something like:

string filePath = "original.xml";

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);
XmlElement root = xmlDoc.DocumentElement;

XmlNode nodeToAdd = doc.CreateElement(XmlNodeType.Element, "user", null);
XmlNode idNode = doc.CreateElement(XmlNodeType.Element, "id", null);
idNode.InnerText = "1";
XmlNode nameNode = doc.CreateElement(XmlNodeType.Element, "name", null);
nameNode.InnerText = "a";

nodeToAdd.AppendChild(idNode);
nodeToAdd.AppendChild(nameNode);


root.AppendChild(nodeToAdd);

xmlDoc.Save(filePath); // Overwrite or replace with new file name

But you haven't said where the xml fragments are - in files/strings?

Upvotes: 3

L.B
L.B

Reputation: 116188

string xml =
   @"<project>
        <user>
           <id>1</id>
           <name>a</name>
        </user>
        <user>
           <id>2</id>
           <name>b</name>
        </user>
     </project>";

XElement x = XElement.Load(new StringReader(xml));
x.Add(new XElement("user", new XElement("id",3),new XElement("name","c") ));
string newXml = x.ToString();

Upvotes: 6

Related Questions