XML将数据附加到c#中的现有文件

时间:2013-12-13 07:39:30

标签: c# xml

我是XML的新手,所以需要一些关于XML的帮助。下面是XML文件,需要将数据附加到现有的XML文件中。     如果是新节点需要添加到现有XML文件而不丢失数据。如果是新数据库节点,则需要将新数据库节点添加到现有文档。

<?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> 

1 个答案:

答案 0 :(得分:3)

您可以使用LINQ to XML。向根元素添加元素会将其附加到所有子元素的末尾。例如。添加新数据库:

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);

添加服务器元素更棘手,因为它应该在最后一个现有服务器之后添加,或者如果不存在其他服务器则作为root的第一个子节点添加:

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);