从多个相关XML文件构造表

时间:2012-11-08 11:24:15

标签: c# .net xml

我有两个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> 

Student.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 John 100

2 Mark 200

如何在c#中实现这一点? 注意:我的文件并不那么简单,因此合并它们将没有用处

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:-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();

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

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