1

我有两个 XML 文件,它们代表两个之间有关系的关系表。文件如下: Exam.XML

 <?xml version="1.0" encoding="utf-8" ?>
 <Exam>
   <Student id='1'>
     <result>100 </result>
  </Student >
  <Student id='2'>
     <result>200 </result>
  </Student >
 </Exam> 

学生.XML

 <?xml version="1.0" encoding="utf-8" ?>
<Students>
  <Student id='1'>
      <name>John</name>
  </Student >
  <Student id='2'>
     <name>Mark </name>
  </Student >

结果应该是

StudentID StudentName 结果

1约翰100

2 马克 200

如何在 C# 中实现这一点?注意:我的文件不是那么简单,所以合并它们不会有帮助

4

2 回答 2

1

Linq2Xml 可以在这里提供帮助。

var list = XDocument.Load("student.xml").Descendants("Student")
             .Join(XDocument.Load("exam.xml").Descendants("Student"),
                   x => x.Attribute("id").Value, 
                   y => y.Attribute("id").Value, 
                   (s, e) => new{
                        Name = s.Element("name").Value,
                        Id = s.Attribute("id").Value,
                        Result = e.Element("result").Value
                    })
             .ToList();

或与查询语法相同的东西

var query = from s in XDocument.Load("student.xml").Descendants("Student")
            join e in XDocument.Load("exam.xml").Descendants("Student")
                   on s.Attribute("id").Value equals e.Attribute("id").Value
            select new {
                            Name = s.Element("name").Value,
                            Id = s.Attribute("id").Value,
                            Result = e.Element("result").Value
                       };

var list = query.ToList();
于 2012-11-08T11:50:00.213 回答
-1

在这种情况下,我加载 2 个数据表并以编程方式创建第三个

加载到数据表中可以这样完成

DataTable newTable = new DataTable();
newTable.ReadXml("FILENAME.xml");

然后以编程方式创建一个新的数据表

    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();

如果这不能回答您的问题(您需要更详细的解释),请对此发表评论并为您详细说明:)

请记住,如果问题有帮助,为什么不继续标记它

于 2012-11-08T11:29:39.547 回答