2011-08-28 91 views
-2

我有一个XML文件,如下所示,我需要在C#中进行编辑,插入一个新的节点:插入节点

<?xml version="1.0" encoding="utf-8"?> 
<Users> 
    <User> 
    <Name>John Smith</Name> 
    <test> 
     <Date>23.05.2011</Date> 
     <points>33</points> 
    </test> 
    <test> 
     <Date>22.06.2011</Date> 
     <points>29</points> 
    </test> 
    </User> 
    <User> 
    <Name>David Chris</Name> 
    <test> 
     <Date>01.02.2009</Date> 
     <points>25</points> 
    </test> 
    <test> 
     <Date>14.01.2010</Date> 
     <points>231</points> 
    </test> 
</User> 

我需要插入另一个“在这个例子中第三个”元素,以所谓的用户‘约翰史密斯’的所有子元素.. 因此XML将成为:

<?xml version="1.0" encoding="utf-8"?> 
<Users> 
    <User> 
    <Name>John Smith</Name> 
    <test> 
     <Date>23.05.2011</Date> 
     <points>33</points> 
    </test> 
    <test> 
     <Date>22.06.2011</Date> 
     <points>29</points> 
    </test> 
    <test> 
     <Date>30.10.2011</Date> 
     <points>21</points> 
    </test></b> 
    </User> 
    <User> 
    <Name>David Chris</Name> 
    <test> 
     <Date>01.02.2009</Date> 
     <points>25</points> 
    </test> 
    <test> 
     <Date>14.01.2010</Date> 
     <points>231</points> 
    </test> 
</User> 

任何帮助非常感谢.. 非常感谢..

+0

琐碎的问题... –

回答

2
class Program 
{ 
    static void Main() 
    { 
     var doc = XDocument.Load("test.xml"); 
     var johnSmith = doc 
      .Descendants("User") 
      .Descendants("Name") 
      .Where(x => x.Value == "John Smith") 
      .Select(x => x.Parent) 
      .First(); 

     johnSmith.Add(
      new XElement("test", 
       new XElement("Date", "30.10.2011"), 
       new XElement("points", "21") 
      ) 
     ); 
     doc.Save("new.xml"); 
    } 
} 
0
  1. 对于.NET框架3.5和更高版本:XDocument
  2. 对于.NET Framework 1.1和更高版本:XmlDocument
+0

3.5比1.1 – Grokodile

+0

@Grokodile更高,真的吗? –

2

简单(假设您使用.NET 3.5或更高版本):

  • 加载文档(例如使用XDocument.Load
  • 加入相关元素(创建一个新的XElement,找到插入点,叫insertionPoint.Add(newElement)
  • 保存文档(XDocument.Save

的LINQ to XML使得几乎所有的基于XML的任务变得简单比以前的API ...如果上面的启动不够好,我强烈建议阅读LINQ to XML教程。

没有简单的方法插入新的元素没有完全读取旧文件,操纵它,然后写出它。理论上你可能XmlReaderXmlWriter以流媒体的方式来做,但他们几乎总是比他们的价值更麻烦。

0

在这里你去:

class Program 
{ 
    static void Main(string[] args) 
    { 
     XElement main = XElement.Load(@"users.xml"); 

     // write new data to new file 
     string newDate = "01.01.2012"; 
     string newPoints = "42"; 
     main.Descendants("User") 
      .Descendants("Name") 
      .Where(e => e.Value == "John Smith") 
      .Select(e => e.Parent) 
      .First() 
      .Add(new XElement("test", 
       new XElement("date", newDate), 
       new XElement("points", newPoints) 
       ) 
      ); 

     main.Save("users2.xml"); 
    } 
}