C#遍历XML指定week节点并存储子元素值为变量的问题求助
代码核心问题梳理
- 循环内错误调用了
xelem(符合条件的week节点集合),而非当前遍历到的单个week节点,导致每次取的都是所有符合条件节点的子元素集合,拿不到单个节点的对应值 Any()方法返回的是布尔值,仅用于判断是否存在对应元素,无法读取元素内容,你实际需要的是取子元素的文本值后做类型转换Elements()返回的是同名称子元素的集合,你这里每个week下只有一个对应子元素,应该用Element()取单个节点,再通过.Value属性取文本内容
修正后可运行代码
using System.Xml.Linq; // 注意要提前引入这个命名空间 // 加载XML文件(这里IHCSchedulingConfigFile替换为你实际的XML文件路径) XDocument xdoc = XDocument.Load(IHCSchedulingConfigFile); // 筛选所有weeknumber为2的week节点,增加空判断避免属性不存在时报错 var weekList = xdoc.Descendants("week") .Where(x => x.Attribute("weeknumber")?.Value == "2") .ToList(); foreach (var week in weekList) { // 读取当前week节点下的子元素值 int groupNumber = Convert.ToInt32(week.Element("groupNumber")?.Value); string startTime = week.Element("starttime")?.Value; int startDay = Convert.ToInt32(week.Element("startday")?.Value); string endTime = week.Element("endtime")?.Value; int endDay = Convert.ToInt32(week.Element("endday")?.Value); // 输出测试 Console.WriteLine(groupNumber); Console.WriteLine(); Console.WriteLine(startTime); Console.WriteLine(); Console.WriteLine(startDay); Console.WriteLine(); Console.WriteLine(endTime); Console.WriteLine(); Console.WriteLine(endDay); Console.WriteLine(); Console.ReadLine(); // 这里放入你要执行的预设代码即可 }
额外优化说明
- 代码里加了
?.空值传播运算符,避免XML节点/属性缺失时触发空引用异常,如果你的XML结构是固定的也可以去掉 - XElement支持直接显式转换为对应类型,比如
(int)week.Element("groupNumber"),不需要手动调用Convert转换,只要保证节点内容符合目标类型格式即可,写法会更简洁
内容的提问来源于stack exchange,提问作者Tobias Axbard
相关产品推荐
相关产品推荐

