C#ASP.NET按自定义属性排序XML节点

时间:2017-09-13 11:55:41

标签: c# asp.net xml linq sorting

有没有办法可以根据属性值对xmlnodes进行排序?关键是每个子节点都有不同的名称,尽管如此,我想按属性对它们进行排序 E.g。

<Doc>
<mar_03 data="03">
  <Mattina_Turno_1 />
</mar_03>
<dom_01 data="01">
  <Mattina_Turno_1 />
</dom_01>
<mer_04 data="04">
  <Mattina_Turno_1 />
  <Mattina_Turno_2 />
</mer_04>
</Doc>

应该成为

<Doc>
<dom_01 data="01">
  <Mattina_Turno_1 />
</dom_01>
<mar_03 data="03">
  <Mattina_Turno_1 />
</mar_03>
<mer_04 data="04">
  <Mattina_Turno_1 />
  <Mattina_Turno_2 />
</mer_04> </Doc>

我该怎么办?排序后显然我想覆盖文件。

This回答无法解决我的问题,因为我无法定义节点&#34; item&#34;因为每个节点的命名都不同。

谢谢,请不要将其标记为重复,因为它不是!

2 个答案:

答案 0 :(得分:1)

请尝试,

XDocument xdoc = XDocument.Load("File.xml");

        var result = xdoc.Element("Doc")
        .Elements()
        .OrderBy(s => (int)s.Attribute("data"));

        string xmlOutPut = string.Empty;

        result.ToList().ForEach(a =>
        {
            xmlOutPut += a;
        });

根据您的示例,数据和Doc是父元素是您的属性。 File.xml是您的xml文件名。您将在'xmlOutPut'

中获得已排序的输出

或单个Linq查询中的所有内容,

XDocument xdoc = XDocument.Load("XMLFile2.xml");
        string xmlOutPut = string.Empty;

        xdoc.Element("Doc")
          .Elements()
          .OrderBy(s => (int)s.Attribute("data"))
         .ToList().ForEach(a =>
         {
             xmlOutPut += a;
         });

答案 1 :(得分:0)

<强>分拣

XDocument xDoc = XDocument.Load("FileName.xml");

    var res = xDoc.Element("Doc")
                    .Elements()
                    .OrderByDescending(c => (int) c.Attribute("data"));

然后保存它:

XDocument doc = new XDocument(new XElement("Doc", res));
doc.Save("FileName.xml");