2011-06-05 76 views
-6

如何将新节点添加到现有XML文件的末尾?如何将新节点添加到现有XML文件的末尾?

我明白了,但到底怎么样?

例如,我有以下XML文件,并需要添加一个新的节点“项目”到文件的末尾:

<?xml version="1.0" encoding="utf-8" ?> 
- <entries> 
- <entry type="debit"> 
<amount>100</amount> 
<date>11.11.2010</date> 
- <description> 
- <![CDATA[ Описание записи]]> 
</description> 
<category>Продукты</category> 
</entry> 
- <entry type="credit"> 
<amount>50</amount> 
<date>11.11.2010</date> 
- <description> 
- <![CDATA[ Описание записи]]> 
</description> 
<category>Продукты</category> 
</entry> 
- <entry type="debit"> 
<amount>100</amount> 
<date>11.11.2010</date> 
- <description> 
- <![CDATA[ Описание записи]]> 
</description> 
<category>Продукты</category> 
</entry> 
</entries> 
+1

这还不清楚。请在添加之前和之后提供XML示例。 – GSerg 2011-06-05 16:38:43

+0

看看:http://stackoverflow.com/questions/849043/fastest-way-to-add-new-node-to-end-of-an-xml – 2011-06-05 16:42:18

+0

可能的重复[在C#中,是否有一个如何将XML节点添加到磁盘上的文件而无需首先加载?](http://stackoverflow.com/questions/4773564/in-c-is-there-a-way-to-add-an-xml-节点到磁盘上的文件不需要加载它) – 2011-06-05 18:06:23

回答

7

最简单的方法是将XML加载到内存中,追加子节点,然后再写出整个文档。例如:

XDocument doc = XDocument.Load("before.xml"); 
doc.Root.Add(new XElement("extra")); 
doc.Save("after.xml"); 

如果这不完全是你之后的事情,请澄清你的问题。

+0

@Downvoter:关心评论? – 2011-06-05 19:11:53

+0

非常感谢,但是如何在不创建新文件的情况下添加现有文件。只使用system.xml,而不是linq。 – dev85 2011-06-06 12:04:28

+0

@Dimitri:相同的原理 - 加载它,改变内存,保存它。只需使用'XmlDocument'而不是'XDocument'。如果您不想创建* new *文件,只需覆盖旧文件。如果您尝试了所有这些并遇到问题,请编辑您的问题以显示*您尝试过的*。 – 2011-06-06 12:08:26

1
XmlDocument doc = new XmlDocument(); 
doc.LoadXml("before.xml"); 
//XmlNode root = doc.DocumentElement; 

//Create a new node. 
XmlElement elem = doc.CreateElement("entry"); 
elem.InnerText=""; 
//Add the node to the document. 
//root.AppendChild(elem); 

//Console.WriteLine("Display the modified XML..."); 

doc.LastChild.AppendChild(elem); 

doc.Save("before.xml");'