根据另一个 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 结果
所以在这个代码块中:
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
};