gpt4 book ai didi

c# - 使用 Linq C# 对多级 XML 进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:58 24 4
gpt4 key购买 nike

我正在尝试使用 Linq 对 XML 进行排序,但它不起作用这是 XML

<hierarchy>
<date>2015/04/01 15:29:10</date>
<folder name="Root" id="Root">
<file id="Fukui_R3_20150327182224.xlsx" />
<file id="BordersTest_20150330144902.xlsx" />
<folder name="level-1" id="1427455995512">
<file id="Fukui_R3_20150327182224.xlsx" />
<file id="BordersTest_20150330144902.xlsx" />
<folder name="Zxcf" id="1427869724768">
<file id="Fukui_R3_20150327182224.xlsx" />
<file id="BordersTest_20150330144902.xlsx" />
</folder>
<folder name="Aegh" id="1427869732372">
<file id="Fukui_R3_20150327182224.xlsx" />
<file id="BordersTest_20150330144902.xlsx" />
</folder>
<folder name="Cfgt" id="1427869741718" />
</folder>
<folder name="A-level" id="1427869672074" />
<folder name="G-Level" id="1427869682304" />
<folder name="E-Level" id="1427869690384" />
<folder name="1-A-Level" id="1427869701383" />
</folder>
</hierarchy>

这是我试过的代码

 XDocument xDoc = XDocument.Load(FilePath);
foreach (var trans in xDoc.Descendants("hierarchy"))
{
trans.ReplaceAll( trans.Elements().OrderBy(x=>x.Name.LocalName));
}

string newXml = xDoc.ToString();

但它返回相同的未排序 XML。

最佳答案

像这样重写你的代码:

XDocument xDoc = XDocument.Load(FilePath);
if (xDoc.Root != null)
SortXml(xDoc.Root);
string newXml = xDoc.ToString();

并尝试使用这个方法:

private static void SortXml(XContainer parent)
{
var elements = parent.Elements()
.OrderByDescending(e => e.Name.LocalName)
.ThenBy(e => (string)e.Attribute("name"))
.ToArray();

Array.ForEach(elements, e => e.Remove());

foreach (var element in elements) {
parent.Add(element);
SortXml(element);
}
}

此代码以递归方式对您的层次结构进行排序:文件始终位于文件夹之后,所有项目均按属性“名称”的值排序。

关于c# - 使用 Linq C# 对多级 XML 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29384283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com