簡體   English   中英

在 C# 中的現有 XDocument 中添加 Xelement

[英]Add Xelement in existing XDocument in C#

我有帶有詳細信息的 XML。 我想復制整個<Details>節點並使用完全相同的屬性創建更新的<Details>節點。

我的 XML 看起來像這樣:

<root>        
    <Details>
        <A.EMPLID>0000177008</A.EMPLID>
            <G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
            <G.FIRST_NAME>Tracy</G.FIRST_NAME>      
    </Details>      
</root>

我想創建一個這樣的新節點

<root>        
    <Details>
            <A.EMPLID>0000177008</A.EMPLID>
            <G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
            <G.FIRST_NAME>Tracy</G.FIRST_NAME>      
    </Details>  
    <Newdetails>
        <Details>
            <A.EMPLID>0000177008</A.EMPLID>
            <G.LAST_NAME>Huziak-Clark</G.LAST_NAME>
            <G.FIRST_NAME>Tracy</G.FIRST_NAME>      
        </Details>  
    </Newdetails>
</root>

我已經像這樣使用了XElement ,但它只是在XDocument添加了<NewDeatils/>節點,而不是剩余的節點。

foreach(XElement e in XDocument.Descendants("Details"))
{
     XDocument.Root.Element.Add("NewDetails",XElement("Deatils");
}

如何選擇整個XElement並將其附加到<Newdetails>節點下?

謝謝!

首先,加載文件並獲取名為“Details”的所有Descendants

var file = @"XMLFile.xml";
var doc = XDocument.Load(file);
var details = doc.Root.Descendants().Where(x => x.Name == "Details");

這為您提供了Details節點的集合,在您的示例文件中只有一個。 然后,我迭代通過他們,並為他們每個人創建一個新的XElemen名為NewDetails並添加現有元素作為孩子。

請注意,我在循環之前獲取details.Count()並將其用作限制。 如果您改為使用foreach ,這將變成無限循環,所以要小心。

var count = details.Count();
for (var i = 0; i < count; i++)
{
    var newDetails = new XElement("NewDetails");
    newDetails.Add(details);
    doc.Root.Add(newDetails);
}

保存以確認結果。

var fileNew = @"XMLFile2.xml";
doc.Save(fileNew);

這是添加節點前后的文件:

前:

在此處輸入圖片說明

后:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM