使用Linq C#对多层XML排序

阿迪

我正在尝试使用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。

rtf_leg

像这样重写代码:

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);
    }
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C# 使用 Linq to XML 对 XML 文件进行排序

来自分类Dev

C# 使用 Linq to XML 对 XML 文件进行排序

来自分类Dev

使用linq在C#中排序

来自分类Dev

使用linq在C#中排序

来自分类Dev

使用C#中的LINQ对XML文档中的元素进行分组和排序

来自分类Dev

使用C#访问多层字典

来自分类Dev

在C#中使用LINQ解析XML

来自分类Dev

C#使用Linq从xml提取数据

来自分类Dev

在C#中使用LINQ创建XML

来自分类Dev

在C#中使用linq对List <>进行排序

来自分类Dev

使用LINQ C#根据状态对列表进行排序

来自分类Dev

在C#中使用linq对List <>进行排序

来自分类Dev

按 len() 排序,但在 linq 中使用 c#

来自分类Dev

在 C# 中使用 LINQ to XML 生成 XML 报告

来自分类Dev

在C#中使用linq

来自分类Dev

在C#中使用linq

来自分类Dev

使用C#的Linq查询

来自分类Dev

C#使用LINQ解析简单的XML文件

来自分类Dev

使用LINQ用XML在C#中创建对象

来自分类Dev

在C#中使用LINQ将XML解析为类

来自分类Dev

使用Linq在C#中删除多个XML节点

来自分类Dev

如何在C#中使用linq循环遍历xml?

来自分类Dev

C#使用LINQ解析简单的XML文件

来自分类Dev

使用Linq解析出XML同级节点-C#

来自分类Dev

在C#中使用LINQ将XML解析为类

来自分类Dev

C# 使用 linq 反序列化 xml

来自分类Dev

如何使用 C#、Linq 和 XML 选择特定元素?

来自分类Dev

如何使用 linq C# 读取复杂的 XML

来自分类Dev

使用 LINQ c# 获取节点值 xml