2014-05-14 74 views
1

我有以下XML文件,當前有100多個客戶端節點,並且我想使用C#向其中的每個節點添加元素。向現有XML文件中的多個節點添加新元素

我的XML文件的結構如下:

<file_specs> 
    <client> 
    <account_number></account_number> 
    <client_name></client_name> 
    <file_type></file_type> 
    <file_extension></file_extension> 
    <file_hasdelimiter></file_hasdelimiter> 
    <file_delimiter></file_delimiter> 
    <central_one>false</central_one> 
    <central_code>none</central_code> 
    <central_two>false</central_two> 
    <c_two_code>none</c_two_code> 
    <header_line>true</header_line> 
    <has_quotes>true</has_quotes> 
    <start_line>1</start_line> 
    <has_one>true</has_one> 
    <one_column>2</one_column> 
    <has_two>true</has_two> 
    <two_column>12</two_column> 
    </client 

我已經通過其他的答案看起來,我嘗試了各種解決方案。這一件作品,但只有第一個客戶端,所有其他人都不會受到影響:

 XDocument doc = XDocument.Load(@"c:/xmlconfig/sample.xml"); 
     doc.Root.Element("client").Add(new XElement("testing", "none")); 

我嘗試添加一個foreach循環,它會爲每個客戶端節點的檢驗機構,但它增加了他們全部的第一項其餘的都沒有變化。

 XDocument doc = XDocument.Load(@"c:/xmlconfig/miss.xml"); 
    foreach (var client in doc.Descendants("client")) 
    { 
     doc.Root.Element("client").Add(new XElement("testing", "none")); 
    } 

我在哪裏錯過了什麼?

回答

4

你應該新元素添加到每個客戶端:

XDocument doc = XDocument.Load(@"c:/xmlconfig/miss.xml"); 
foreach (var client in doc.Descendants("client")) 
{ 
    // use current client 
    client.Add(new XElement("testing", "none")); 
} 

讓我們看看這裏發生了什麼:

foreach (var client in doc.Descendants("client")) 
{ 
    doc.Root.Element("client").Add(new XElement("testing", "none")); 
} 

對於你執行查詢這需要下根第一個客戶元素的每個客戶端。然後添加到此第一個客戶端的新元素。這個重複了很多次,和xml中的客戶端數量一樣。並且您最終將測試元素添加到第一個客戶端N次。

+1

Argh。我知道這很簡單。我討厭學習曲線。這很好,謝謝。 – JohnP

相關問題