使用c#中的元素对xml节点进行排序 [英] Sorting xml nodes using elements in c#
问题描述
我有以下需要根据出生日期排序的XML元素
Hi, I have the below XML element that need to sorted based on date of birth
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < Info>
< EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Employee Name" name =" EMPLOYEE NAME" value =" Chirs" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey ="出生日期" name ="出生日期" value =" 02-07-1990" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Salary"名称= QUOT; SALARY" value =" 6,458" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Employee Name" name =" EMPLOYEE NAME" value =" Mothie" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey ="出生日期" name ="出生日期" value =" 13-08-2000" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Salary"名称= QUOT; SALARY" value =" 6,458" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EmployeeDetail>
< EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Employee Name" name =" EMPLOYEE NAME" value =" Manie" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey ="出生日期" name ="出生日期" value =" 03-07-1990" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Salary"名称= QUOT; SALARY" value =" 6,458" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EmployeeDetail>
< / Info>
输出应该是这样的
"< Info>
< EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Employee Name" name =" EMPLOYEE NAME" value =" Mothie" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey ="出生日期" name ="出生日期" value =" 13-08-2000" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Salary"名称= QUOT; SALARY" value =" 6,458" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Employee Name" name =" EMPLOYEE NAME" value =" Manie" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey ="出生日期" name ="出生日期" value =" 03-07-1990" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Salary"名称= QUOT; SALARY" value =" 6,458" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EmployeeDetail>
< EmployeeDetail>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Employee Name" name =" EMPLOYEE NAME" value =" Chirs" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey ="出生日期" name ="出生日期" value =" 02-07-1990" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < field fieldKey =" Salary"名称= QUOT; SALARY" value =" 6,458" />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / EmployeeDetail>
< / Info>"
<Info>
<EmployeeDetail>
<field fieldKey="Employee Name" name="EMPLOYEE NAME" value="Chirs"/>
<field fieldKey="date of birth" name="DATE OF BIRTH" value="02-07-1990"/>
<field fieldKey="Salary" name="SALARY" value="6,458"/>
</EmployeeDetail>
<EmployeeDetail>
<field fieldKey="Employee Name" name="EMPLOYEE NAME" value="Mothie"/>
<field fieldKey="date of birth" name="DATE OF BIRTH" value="13-08-2000"/>
<field fieldKey="Salary" name="SALARY" value="6,458"/>
</EmployeeDetail>
<EmployeeDetail>
<field fieldKey="Employee Name" name="EMPLOYEE NAME" value="Manie"/>
<field fieldKey="date of birth" name="DATE OF BIRTH" value="03-07-1990"/>
<field fieldKey="Salary" name="SALARY" value="6,458"/>
</EmployeeDetail>
</Info>
Output should be like this
"<Info>
<EmployeeDetail>
<field fieldKey="Employee Name" name="EMPLOYEE NAME" value="Mothie"/>
<field fieldKey="date of birth" name="DATE OF BIRTH" value="13-08-2000"/>
<field fieldKey="Salary" name="SALARY" value="6,458"/>
</EmployeeDetail>
<EmployeeDetail>
<field fieldKey="Employee Name" name="EMPLOYEE NAME" value="Manie"/>
<field fieldKey="date of birth" name="DATE OF BIRTH" value="03-07-1990"/>
<field fieldKey="Salary" name="SALARY" value="6,458"/>
</EmployeeDetail>
<EmployeeDetail>
<field fieldKey="Employee Name" name="EMPLOYEE NAME" value="Chirs"/>
<field fieldKey="date of birth" name="DATE OF BIRTH" value="02-07-1990"/>
<field fieldKey="Salary" name="SALARY" value="6,458"/>
</EmployeeDetail>
</Info>"
推荐答案
基于在
https://social.msdn.microsoft.com/Forums/en-US/fbac1312-23fe-49df-8aa9-4cc688d45ed1 ,请查看此示例:
Based on https://social.msdn.microsoft.com/Forums/en-US/fbac1312-23fe-49df-8aa9-4cc688d45ed1, check this example:
string example = @"
<Info>
<EmployeeDetail>
<field fieldKey=""Employee Name"" name=""EMPLOYEE NAME"" value=""Chirs""/>
<field fieldKey=""date of birth"" name=""DATE OF BIRTH"" value=""02-07-1990""/>
<field fieldKey=""Salary"" name=""SALARY"" value=""6,458""/>
</EmployeeDetail>
<EmployeeDetail>
<field fieldKey=""Employee Name"" name=""EMPLOYEE NAME"" value=""Mothie""/>
<field fieldKey=""date of birth"" name=""DATE OF BIRTH"" value=""13-08-2000""/>
<field fieldKey=""Salary"" name=""SALARY"" value=""6,458""/>
</EmployeeDetail>
<EmployeeDetail>
<field fieldKey=""Employee Name"" name=""EMPLOYEE NAME"" value=""Manie""/>
<field fieldKey=""date of birth"" name=""DATE OF BIRTH"" value=""03-07-1990""/>
<field fieldKey=""Salary"" name=""SALARY"" value=""6,458""/>
</EmployeeDetail>
</Info>";
XDocument doc = XDocument.Parse( example );
Console.WriteLine( doc );
Func<string, DateTime?> conv = s => s == null ? (DateTime?)null : DateTime.ParseExact( s, "dd'-'MM'-'yyyy", CultureInfo.InvariantCulture );
doc.Root.ReplaceAll(
doc
.Root
.Elements()
.OrderByDescending( ed => conv( ed.Elements( "field" ).FirstOrDefault( f => f.Attribute( "fieldKey" )?.Value == "date of birth" )?.Attribute( "value" )?.Value ) ) );
Console.WriteLine( doc );
这篇关于使用c#中的元素对xml节点进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!