You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何将XML子节点添加到指定父节点(XDocument实现)

用XDocument实现节点迁移到新增节点的方案

完全明白你的需求,咱们用XDocument就能轻松搞定这个XML结构调整,下面是具体的实现步骤和代码:

核心思路

  1. 加载目标XML文档到XDocument实例
  2. 定位到<sheet1>根节点
  3. 创建新的<table>节点
  4. 把<sheet1>下所有<rd>节点迁移到新的<table>里(注意规避遍历集合时修改集合的常见坑)
  5. 将<table>节点添加回<sheet1>
  6. 保存或输出修改后的XML

完整代码示例

// 从文件加载XML(也可以用XDocument.Parse()从字符串加载)
XDocument xmlDoc = XDocument.Load("your-source.xml");

// 获取<sheet1>节点,先做非空判断避免空引用异常
XElement sheet1Node = xmlDoc.Element("sheet1");
if (sheet1Node != null)
{
    // 创建新的<table>节点
    XElement tableNode = new XElement("table");

    // 这里一定要调用ToList()!否则遍历过程中移除节点会触发集合修改异常
    foreach (XElement rdNode in sheet1Node.Elements("rd").ToList())
    {
        // 先从<sheet1>移除<rd>,再添加到<table>节点中
        rdNode.Remove();
        tableNode.Add(rdNode);
    }

    // 把建好的<table>节点加到<sheet1>下面
    sheet1Node.Add(tableNode);

    // 保存修改后的XML到文件
    xmlDoc.Save("your-modified.xml");
}

效果验证

修改前的XML结构:

<sheet1>
  <rd>内容1</rd>
  <rd>内容2</rd>
</sheet1>

修改后的XML结构:

<sheet1>
  <table>
    <rd>内容1</rd>
    <rd>内容2</rd>
  </table>
</sheet1>

关键注意点

为什么要调用ToList()?因为sheet1Node.Elements("rd")返回的是一个延迟加载的集合,直接遍历的时候如果移除节点,集合的实时状态会发生变化,导致InvalidOperationException。转成List之后会把所有<rd>节点先加载到内存里,遍历操作就不会受后续移除动作的影响了。

内容的提问来源于stack exchange,提问作者Uzarsef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:27:41