使用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
相关产品推荐
相关产品推荐

