根据另一个 xml 文件中另一个查询中的数组从 xml 文件中获取数据

本文关键字:xml 文件 另一个 获取 数据 数组 查询 | 更新日期: 2023-09-27 17:56:50

我有这个用于表学生的xml文件,下面是结构。

<?xml version="1.0" encoding="utf-8"?>
 <StudentModules>
  <Student Student_ID="001">
    <Module  ID="M001" />
    <Module  ID="M002" />
    <Module  ID="M003" />
    <Module  ID="M004" />
  </Student>
  <Student Student_ID="002">
    <Module ID="M005"/>
    <Module ID="M006" />
    <Module ID="M007"/>
    <Module ID="M008" />
  </Student>

然后我有这个模块文件,下面是结构

<?xml version="1.0" encoding="utf-8"?>
 <ModuleSchedule>
  <ModuleTimeTable Module_ID="M001" ModuleName="Module Name 1">
    <Slot Day="Monday" Time="09:30"/>
    <Slot Day="Tuesday" Time="14:30"/>
    <Slot Day="Fridayday" Time="09:30"/>
    <Slot Day="Saturday" Time="12:30"/>
  </ModuleTimeTable>
 <ModuleTimeTable Module_ID="M002" ModuleName="Module Name 2">
    <Slot Day="Monday" Time="09:30"/>
    <Slot Day="Tuesday" Time="14:30"/>
    <Slot Day="Fridayday" Time="09:30"/>
    <Slot Day="Saturday" Time="12:30"/>
 </ModuleTimeTable>
 <ModuleTimeTable Module_ID="M003" ModuleName="Module Name 3">
    <Slot Day="Monday" Time="09:30"/>
    <Slot Day="Tuesday" Time="14:30"/>
    <Slot Day="Fridayday" Time="09:30"/>
    <Slot Day="Saturday" Time="12:30"/>    
 </ModuleTimeTable>

我想使用第一个 xml 文件来获取所有模块(模块 ID),其中Student_ID例如 001。他们 我将结果用于我的第二个查询,该查询应该获取模块 ID 是数组结果一的所有模块名称。

这是我所拥有的,

// first linq query
 XDocument stdoc = XDocument.Load(@"E:'studentModules.xml");
     var StudM = (from item in stdoc.Descendants("Student")
                 where item.Attribute("Student_ID").Value.Equals("001")
                 select item);
     foreach (XElement n in StudM)
      {
          var result = (from node in n.Descendants()
                      select new
                      {
                          Mod_ID = node.Attribute("ID").Value
                      });

       }
//second query (doesnt do the job)
 XDocument doc = XDocument.Load(@"E:'Module_Schedule.xml");
 var items = from item in doc.Descendants("ModuleTimeTable")
                where item.Attribute("Module_ID").Value.Contains("result")// doesnt     work
                    select new
                  {
                      ModuleId = (string)item.Attribute("Module_ID").Value,
                      ModuleName = (string)item.Attribute("ModuleName").Value
                   };

        GridView1.DataSource = items.ToList();
        GridView1.DataBind();

我怎样才能改变它才能工作。我想从Module_Schedule.xml中获取模块名称和 ID,它们与从第一个 xml 文件返回的数组 ID 中的 ID 相同。

//编辑目前,它返回一个空的网格视图,没有错误。我认为问题在于如何在第二个查询中调用第一个变量 var 结果

根据另一个 xml 文件中另一个查询中的数组从 xml 文件中获取数据

所以在这个代码块中:

foreach (XElement n in StudM)
{
    var result =
        from node in n.Descendants()
        select new { Mod_ID = node.Attribute("ID").Value };
}

你不断分配给结果,它不仅在foreach循环中定义,而不是在 循环之外定义,而且你从不保存结果变量或对结果变量执行任何操作。因此,它在循环之外的范围内不可用,并且在循环的每次迭代后也会被覆盖。

这应该有效:

var students = XDocument.Load(@"C:'Users'Keoki'Desktop'students.xml");
var modules = XDocument.Load(@"C:'Users'Keoki'Desktop'modules.xml");
var items =
    from s in students.Descendants("Student")
    where s.Attribute("Student_ID").Value == "001"
    select s.Descendants().Attributes("ID").Select(a => a.Value)
    into ids
    from m in modules.Descendants("ModuleTimeTable")
    where ids.Contains(m.Attribute("Module_ID").Value)
    select new {
       ModuleId = m.Attribute("Module_ID").Value,
       ModuleName = m.Attribute("ModuleName").Value
    };