2011-08-28 90 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"); 
    } 
}