Lalita
Lalita

Reputation: 163

XML append data to the exsisting file in c#

am new to XML,so need some help on XML.The below is the XML file,need to append data to the exsisting XML file. If it is new node need to add to the exsisting XML file without losing the data.And if it is new database node need to add the new database node to the exsisting document.

<?xml version="1.0" encoding="ISO-8859-1"?>
<servers>  
  <server serverid="server1" name="test" address="test">
    <port asset="test" portid ="port1" portname="test" stopReq="N" serverid="server1" name="test" url="test"></port>    
  </server>

  <server serverid="server2" name="test" address="test">
    <port asset="test" portid ="test" portname="test" stopReq="N" serverid="server2" name="test" url="test"></port>
  </server>

  <server serverid="server5" name="test" address="test">
    <port asset="test" portid ="port31" portname="test" stopReq="Y" serverid="server5" name="test" url="test"></port>
    <port asset="test" portid ="port110" portname="test" stopReq="Y" serverid="server5" name="test" url="test"></port>
    <port asset="DART" portid ="port111" portname="test" stopReq="Y" serverid="server5" name="test" url="test"></port>
  </server>


<database dbname="test" server="test" UID="test" PWD="test" dbType="test" name="test"></database>
<database dbname="test" server="test" UID="test" PWD="test" dbType="test" name="test"></database>


</servers> 

Upvotes: 0

Views: 255

Answers (1)

Sergey Berezovskiy
Sergey Berezovskiy

Reputation: 236318

You can use LINQ to XML. Adding element to the root element will append it at the end of all child elements. E.g. adding new database:

var xdoc = XDocument.Load(path_to_xml);
var database = new XElement("database", 
                 new XAttribute("dbname", "test"),
                 new XAttribute("server", "test"),
                 new XAttribute("UID", "test"));  // etc
xdoc.Root.Add(database);
xdoc.Save(path_to_xml);

Adding server element is more tricky, because it should be added after last existing server, or as first child of root if no other servers exist:

var server = new XElement("server",
                 new XAttribute("serverid", "server6"),
                 new XAttribute("name", "test"),
                 new XElement("port",
                     new XAttribute("asset", "test"),
                     new XAttribute("portid", "port42")));

var lastServer = xdoc.Root.Elements("server").LastOrDefault();
if (lastServer != null)
    lastServer.AddAfterSelf(server);
else
    xdoc.Root.AddFirst(server);

Upvotes: 3

Related Questions