【问题标题】:How to create an XML file from a GenericList<T> using LINQ using C# [closed]如何使用 C# 使用 LINQ 从 GenericList<T> 创建 XML 文件 [关闭]
【发布时间】:2015-02-18 22:17:19
【问题描述】:
class Program
{
    class Student
    {
        public int SID { get; set; }
        public string Name { get; set; }
        public string Major { get; set; }
        public List<SubjGrade> SubjectGrades { get; set; }
    }

class SubjGrade
{
    public string Subject { get; set; }
    public decimal grade { get; set; }
}
static List<Customer> LoadCustomers(string file) {}

static void Main(string[] args)
{
    var Students = LoadStudents(@"C:\Users\Chris\Documents\Students.txt");

    var studXML = 
        new XElement("Root",
                        from student in Students 
                        select new XElement("Student",
                                    new XElement("SID",student.SID),
                                    new XElement("Name",student.Name),
                                    new XElement("Major",student.Major)
                        // ????
                        // I cannot figure out how to create XElements
                        // for the SubjGrade list
                                            ) // end student
                    ); // end root
    Console.WriteLine(studXML);


    // this test works just fine but not what i am trying achive
    IEnumerable<Student> studs = from student in Students select student;
    foreach (var s in studs)
    {
        Console.WriteLine("{0} {1}\t{2}", 
                s.SID.ToString(), s.Name, s.Major);
        Console.WriteLine("Class Cnt: {0}", 
                s.SubjectGrades.Count.ToString());
        foreach (var g in s.SubjectGrades)
        {
            Console.WriteLine("\t{0}\t{1}", 
                    g.Subject, g.grade.ToString());        
        }
    }
}

【问题讨论】:

  • 我无法弄清楚如何将主题和成绩项目放入学生元素中
  • 你能提供一个你希望它看起来如何的例子吗?

标签: c# xml linq using


【解决方案1】:

这将允许您在 Student 元素下方创建多个 Grade 元素。

var studXML =
            new XElement("Root",
                            from student in Students
                            select new XElement("Student",
                                        new XElement("SID", student.SID),
                                        new XElement("Name", student.Name),
                                        new XElement("Major", student.Major),
                                        new XElement("Grades",
                                                    from subjectGrade in student.SubjectGrades
                                                    select new XElement("Grade",
                                                               new XElement("Subject", subjectGrade.Subject),
                                                               new XElement("Grade", subjectGrade.grade)))
                                                ) // end student
                        ); // end root
        Console.WriteLine(studXML);

请注意,这并不能防止 SubjectGrades 为空。

【讨论】:

  • 我可能会将所有 &lt;Grade&gt; 元素放在一个 &lt;Grades&gt; 中,以使 XML 结构更好。另外,我不确定它是否会像现在这样编译。
  • @MarcinJuraszek 非常好!我真的应该先在 Visual Studio 中写出来。我已经编辑了我的答案以包含 标签
  • 谢谢。我放置了以下代码和结果。
  • new XElement("Classes", from subjectGrade in student.SubjectGrades select new XElement("SubjGrade",subjectGrade.Subject, new XAttribute("Grade", subjectGrade.grade) ) // end SubjGrade ) // 结束类 ) // 结束学生 ); // 结束根
  • 输出:100John SmithEnglishMTH100ENG103ART202HIS110CCS100
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多