我是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>
答案 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);