查询的xml
<?xml version="1.0" encoding="utf-8"?>
<ClassMembers>
<StudentInfo ClassID="2" OrderNumber="10" StudentNumber="1027345953" StudentName="Tom">
<SumTime>2</SumTime>
<Percent>0</Percent>
<AbsenceTime>0</AbsenceTime>
<Day2013-04-25>出勤</Day2013-04-25>
<Day2013-04-24>出勤</Day2013-04-24>
</StudentInfo>
<StudentInfo ClassID="2" OrderNumber="9" StudentNumber="1027344755" StudentName="Joy">
<SumTime>2</SumTime>
<Percent>0</Percent>
<AbsenceTime>1</AbsenceTime>
<Day2013-04-25>出勤</Day2013-04-25>
<Day2013-04-24>缺勤</Day2013-04-24>
</StudentInfo>
</ClassMembers>
第一种方法:
string path = xmlpath+classname + ".xml";
XElement root = XElement.Load(path);
//第一种方法
DataSet ds = new DataSet();
ds.ReadXml(path);
DataTable table = ds.Tables[0];
var students = from student in table.AsEnumerable() select new { name = student.Field<string>("StudentName"), number = student.Field<string>("StudentNumber") }; DataGridView d = new DataGridView();
d.DataSource = students;
d.AutoGenerateColumns = false;
//通过设置AutoGenerateColumns属性使不自动生成列,直接绑定Datagridview。
第二种方法 (需要新建类来投影查询的结果)
StudentInfo类
class StudentInfo
{
private string StudentName;
private string StudentNumber;
private string SumTime;
private string AbsenceTime;
private int CourseID;
private int OrderNumber;
public string studentName
{
get { return StudentName; }
set { StudentName = value; }
}
public string studentNumber
{
get { return StudentNumber; }
set { StudentNumber = value; }
}
public string sumTime
{
get { return SumTime; }
set { SumTime = value; }
}
public string absenceTime
{
get { return AbsenceTime; }
set { AbsenceTime = value; }
}
public int courseID
{
get { return CourseID; }
set { CourseID = value; }
}
public int orderNumber
{
get { return OrderNumber; }
set { OrderNumber = value; }
}
public StudentInfo(string studentName,
string studentNumber,
string sumTime,
string absenceTime,
int courseID,
int orderNumber)
{
StudentNumber = studentNumber;
StudentName = studentName;
SumTime = sumTime;
AbsenceTime = absenceTime;
CourseID = courseID;
OrderNumber = orderNumber;
}
}
IEnumerable<StudentInfo> result = from student in root.Elements("StudentInfo")
select new StudentInfo(
student.Attribute("StudentName").Value,
student.Attribute("StudentNumber").Value,
student.Element("SumTime").Value,
student.Element("AbsenceTime").Value,
Convert.ToInt32(student.Attribute("ClassID").Value),
Convert.ToInt32(student.Attribute("OrderNumber").Value)
);//查询班级成员的姓名,学号
DataTable myOrders = CopyToDataTable<StudentInfo>(result);
/// <summary>
/// 转换DataTable
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="array"></param>
/// <returns></returns>
public static DataTable CopyToDataTable<T>(IEnumerable<T> array)
{
var ret = new DataTable();
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
ret.Columns.Add(dp.Name, dp.PropertyType);
foreach (T item in array)
{
var Row = ret.NewRow();
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
Row[dp.Name] = dp.GetValue(item);
ret.Rows.Add(Row);
}
第三种方法
var students = from student in root.Elements("StudentInfo").AsEnumerable()
select new
{
Name = student.Attribute("StudentName").Value,
Number = student.Attribute("StudentNumber").Value,
CourseId = student.Attribute("CourseId").Value,
OrderNumber = student.Attribute("OrderNumber").Value,
SumTime = student.Element("SumTime").Value,
AbsenceTime = student.Element("AbsenceTime").Value
};
DataTable myOrders = new DataTable();
myOrders.Columns.Add("StudentNumber", typeof(string));
myOrders.Columns.Add("StudentName", typeof(string));
myOrders.Columns.Add("CourseId", typeof(int));
myOrders.Columns.Add("OrderNumber", typeof(int));
myOrders.Columns.Add("SumTime", typeof(string));
myOrders.Columns.Add("AbsenceTime", typeof(string));
foreach (var result in students)
{
myOrders.Rows.Add(new object[] { result.Name, result.Number, Convert.ToInt32(result.CourseId), Convert.ToInt32(result.OrderNumber), result.SumTime, result.AbsenceTime });
}
return myOrders;
按需使用吧。