为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕沐林林 2023-07-09 17:47:17
我有包含详细信息的 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这样使用了,但它只是添加<NewDeatils/>节点XDocument而不是剩余节点。foreach(XElement e in XDocument.Descendants("Details")){     XDocument.Root.Element.Add("NewDetails",XElement("Deatils");}如何选择整个XElement并将其附加到<Newdetails>节点下?
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

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


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);

这是添加节点之前和之后的文件:


前:

//img1.sycdn.imooc.com//64aa8247000152e103330106.jpg

后:

//img1.sycdn.imooc.com//64aa82520001caad03490212.jpg


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信