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

如何使用LINQ对XML文件中的Object节点按字母排序并写回?

使用LINQ to XML对节点按字母排序

问题说明

需要将XML文件中<Objects>节点下的<Object>子节点按文本内容的字母顺序排序后写回文件。原始XML内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Package>
  <Objects>
    <Object Type="Package">moB</Object>
    <Object Type="Package">moA</Object>
    <Object Type="Package">moC</Object>
  </Objects>
</Package>

期望输出:

<?xml version="1.0" encoding="utf-8"?>
<Package>
  <Objects>
    <Object Type="Package">moA</Object>
    <Object Type="Package">moB</Object>
    <Object Type="Package">moC</Object>
  </Objects>
</Package>

当前尝试的代码仅获取了<Objects>节点,但未提取其中的<Object>子节点集合进行排序:

var xdoc = XDocument.Load(inputFile);
var orderedList = xdoc.Root.Element("Objects");

解决方案

要实现排序,需先获取<Objects>下的所有<Object>子节点,排序后替换原节点集合,最后保存文件。完整代码如下:

// 加载XML文件
var xdoc = XDocument.Load(inputFile);

// 获取<Objects>节点,判断是否存在
var objectsNode = xdoc.Root.Element("Objects");
if (objectsNode == null)
{
    return;
}

// 获取所有<Object>子节点,按文本内容字母排序
var sortedObjects = objectsNode.Elements("Object")
                               .OrderBy(obj => obj.Value)
                               .ToList();

// 清空原节点的子元素,添加排序后的节点
objectsNode.RemoveAll();
sortedObjects.ForEach(obj => objectsNode.Add(obj));

// 保存回文件,如需保留格式可调整SaveOptions参数
xdoc.Save(outputFile, SaveOptions.Formatting);

代码关键点说明

  • objectsNode.Elements("Object"):这是你之前缺失的步骤,用于提取<Objects>下所有<Object>子节点的集合。
  • OrderBy(obj => obj.Value):基于<Object>节点的文本内容进行字母升序排序。
  • RemoveAll():清空<Objects>原有的子节点,避免新旧节点重复。
  • SaveOptions.Formatting:保存时自动格式化XML,保留缩进结构,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:31:12