我有一个 XML 文件,我想在其中按字母顺序对 Object
节点进行排序并将它们写回到文件中。原始文件如下所示:
<?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>
我想用 LINQ 解决这个问题,遗憾的是我无法让查询将 Object
节点读取为集合以进行进一步处理。
var xdoc = XDocument.Load(inputFile);
var orderedList = xdoc.Root.Element("Objects");
最佳答案
I want to solve this with LINQ, unfortunately I can't get the query to read the
Object
nodes as a collection for further processing.
您仅读取根节点Objects
,这将给出 XElement
对象而不是集合,您需要读取所有内部 Object
节点:
var objectList = xdoc.Root.Element("Objects").Elements("Object");
结果是 IEnumerable<XElement>
您可以使用 LINQ 对其进行操作。
I want to sort the
Object
nodes alphabetically and write them back to the file.
当您拥有 Object
的集合时您可以按内部文本对其进行排序:
var orderedList = objectList.OrderBy(x => x.Value);
并替换旧的Object
节点按顺序排列:
xdoc.Root.Element("Objects").ReplaceNodes(orderedList);
之后只需将其保存回文件即可:
xdoc.Save(inputFile); // will replace the content
如果您想保留原始文件,只需将其保存到另一个文件即可:
xdoc.Save("someOtherFile.xml");
这里您可以运行所描述的程序,显示之前和之后的文件:
旁注:
请注意,发布的 xml 内容中包含不可打印的字符,这会破坏您的程序:
关于c# - 如何对文件中的 xml 节点进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74950203/