2015-12-15 88 views
0

目前我有工作作爲工作C#程序如下:插入XML節點和內部節點到現有的XML文檔中的C#

  1. 接受值的.xls模板(XLS是由用戶手動創建)
  2. 保存值(匹配字段)到數據庫
  3. 轉換和寫入的.xls到XML。請參考下面的示例輸出:

    Existing XML Structure

現在,我想要做的是:

  1. 讀取現有的XML(創建的XML)
  2. 插入另一組節點和子節點(ReleaseLine和子節點)。它必須接受多個ReleaseLine。
  3. 用附加節點保存/創建新的xml。請參閱以下的輸出:

    This is what I'm looking for:

我現有的C#程序很簡單,但XML節點和層次是血腥深。我剛剛使用new XElement方法創建了C#代碼,併爲每個節點傳遞值。然後我簡單地使用xmlDocument.Save()方法來編寫xml。

[現有XML方案] [3]

回答

0

我找到了我的問題的答案,這裏是鏈接http://www.xmlplease.com/add-xml-linq 使用XPathSelectElement方法,我能夠找到正確的節點並附加了新的XElement塊。

0

要添加節點或附加在現有的XML數據我倒是使用LINQ XML內容。

XElement xml = XElement.Load("file.xml"); 

     xml.Add(new XElement("uberNode", 
     new XElement("childNode", content), 
     new XElement("anotherChildNode", content))); 
     xml.Save("file.xml"); 

Here是一些其他相關的解決方案。

添加到特定節點(例如帶):

繼exisiting XML數據:

`<Names> 
    <Name> 
    <prename>John</prename> 
    <lastname>Snow</lastname> 
    </Name> 
    <Name> 
    <prename>Harry</prename> 
    <lastname>Harry</lastname> 
    </Name> 
</Names>` 

現在我想第一個 「女士prename」 前添加 「年齡」 - 標記 - 標籤和「家庭」 - 標籤後的第一個「姓氏」標籤。

XElement xml = XElement.Load("file.xml"); 

      var childrens = xml.DescendantsAndSelf().ToArray(); 
      var first_prename = childrens[2]; 
      var first_lastname = childrens[3]; 
      Console.WriteLine(childrens[0]); //prints out the whole content 

      first_prename.AddBeforeSelf(new XElement("age", 22)); 

     first_lastname.AddAfterSelf(new XElement("family", new XElement("mother", "paula"), new XElement("father", "paul"))); 

     xml.Save("file.xml"); 

結果:

`<Names> 
    <Name> 
    <age>22</age> 
    <prename>John</prename> 
    <lastname>Snow</lastname> 
    <family> 
     <mother>paula</mother> 
     <father>paul</father> 
    </family> 
    </Name> 
    <Name> 
    <prename>Harry</prename> 
    <lastname>Harry</lastname> 
    </Name> 
</Names>` 

我面臨的問題和LINQ給了我實現這一目標的最簡單的辦法! 也有其他類似的方式,例如here。但我嘗試了更多,DescendantsAndSelf()讓我更容易通過。

+0

感謝您的快速回復。我嘗試了下面的代碼來在ReleaseLine節點內插入新的節點集合,但是它被插入到XML的根節點。如何將新節點插入到正確的子節點?這是我的代碼。再次感謝你的幫助。

+0

我編輯了我的最後一個答案。而且我也要謝謝你,因爲我現在必須解決這個問題! - – Stophane

+0

工程就像一個魅力,謝謝Stophano。我使用xml.Descendants()方法,但您提供的解決方案有很多幫助,再次感謝,歡呼! –