You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 01:51:02