如何将XML中多个Parent节点的子节点合并至单个Parent节点?
合并多个
<Parent>节点为单个节点的解决方案 要实现把多个<Parent>节点合并成一个,并将所有子元素整合进去的需求,你可以基于现有的XDocument代码做如下修改:
我们的核心思路是:找到所有<Parent>元素,将第一个之外的所有子节点移动到第一个<Parent>中,然后删除多余的<Parent>节点。
以下是完整的代码示例,完美衔接你已有的代码逻辑:
var Response = httpService.GetResponse(); XDocument doc = XDocument.Parse(Response); // 定位XML中所有的<Parent>元素 var parentElements = doc.Descendants("Parent").ToList(); // 仅当存在多个Parent节点时执行合并操作 if (parentElements.Count > 1) { // 选取第一个Parent作为最终的容器节点 var targetParent = parentElements.First(); // 遍历剩余的Parent节点,转移它们的子元素并删除自身 foreach (var extraParent in parentElements.Skip(1)) { // 将当前多余Parent的所有子元素添加到目标Parent中 targetParent.Add(extraParent.Elements()); // 删除这个已经空了的多余Parent节点 extraParent.Remove(); } } // 获取修改后的XML字符串,可直接使用或输出 string modifiedXml = doc.ToString();
代码细节说明:
doc.Descendants("Parent"):查找文档中所有层级的<Parent>元素(因为你的Parent直接在根节点下,也可以用doc.Root.Elements("Parent"),效果一致)ToList():将查询结果转为List集合,避免后续删除节点时触发枚举异常parentElements.Skip(1):跳过第一个保留的Parent,处理剩下的所有多余节点extraParent.Elements():获取当前多余Parent下的所有直接子元素,确保只转移内容不包含Parent节点本身extraParent.Remove():完成子元素转移后,清理掉无用的空Parent节点
执行这段代码后,你的XML就会变成预期的结构——单个<Parent>节点包含所有原多个Parent下的子元素。
内容的提问来源于stack exchange,提问作者Swapnil Sundarkar
相关产品推荐
相关产品推荐

