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

使用LINQ获取XML主节点属性时代码无输出的问题咨询

问题分析与修复方案

你的问题出在对XDocument.Root的理解上——xdocument.Root本身就是你要找的<MAINNODE>节点,而你后续调用的.Elements("MAINNODE")是在寻找这个根节点的子节点中名为MAINNODE的元素,可你的XML里根节点的子节点只有<CHILDNODE>,这就导致这一步返回了空集合,后续的LINQ操作自然没有任何输出。

修正后的代码

这里提供两种写法,都能正确获取主节点的AONE属性并转换为整数列表:

写法1:直接操作根节点(更直观)

// 先获取根节点的AONE属性
var aoneAttribute = xdocument.Root?.Attribute("AONE");
var listItems = new List<List<int>>();

if (aoneAttribute != null)
{
    // 分割属性值并转换为整数列表
    var intList = aoneAttribute.Value.Split(' ')
                                   .Select(s => XmlConvert.ToInt32(s))
                                   .ToList();
    listItems.Add(intList);
}

// 遍历输出
foreach (List<int> list in listItems)
{
    // 这里假设你的print方法能正确处理List<int>,比如可以改成控制台输出测试
    foreach (int num in list)
    {
        Console.Write($"{num} ");
    }
    Console.WriteLine();
}

写法2:用LINQ链式调用(保持你原来的风格)

var listItems = new[] { xdocument.Root }
    // 先过滤掉根节点为空或属性不存在的情况
    .Where(node => node != null && node.Attribute("AONE") != null)
    .Select(node => node.Attribute("AONE").Value.Split(' ')
                                               .Select(s => XmlConvert.ToInt32(s))
                                               .ToList())
    .ToList();

foreach (List<int> list in listItems)
{
    print(list);
}

额外提醒(针对LINQ to XML新手)

  • XDocument.Root:返回XML文档的根元素,也就是你的<MAINNODE>
  • Elements("节点名"):返回当前节点的直接子元素中匹配名称的节点集合
  • 一定要注意空引用问题:如果XML结构可能变化,记得先判断节点/属性是否为null,避免运行时抛出NullReferenceException

内容的提问来源于stack exchange,提问作者1998FromPast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:37:37