在 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");
}

如何 select 整个 XElement 并将其附加到 <Newdetails> 节点下?

谢谢!

首先,加载文件并获取所有名为 "Details" 的 Descendants

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

这为您提供了 Details 个节点的集合,在您的示例文件中只有一个。 然后我将遍历它们,并为它们中的每一个创建一个名为 NewDetails 的新 XElemen 并将现有元素添加为子元素。

请注意,我在循环之前获取 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);

添加节点前后的文件如下:

之前:

之后: