有没有办法可以根据属性值对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;因为每个节点的命名都不同。
谢谢,请不要将其标记为重复,因为它不是!
答案 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");