使用 LINQ 获取 XML 的主要元素属性
Posted
技术标签:
【中文标题】使用 LINQ 获取 XML 的主要元素属性【英文标题】:Get main element attributes of XML using LINQ 【发布时间】:2021-05-29 16:14:12 【问题描述】:我需要检索主节点的属性,但我的代码没有打印任何内容。
<MAINNODE AONE="22 11 12" ATWO="444"><CHILDNODE Aone="7"/></MAINNODE>
这是代码:
var listItems = xdocument.Root
.Elements("MAINNODE")
.Select(e => e.Attribute("AONE"))
.Select(a => a.Value.Split(' ').Select(s => XmlConvert.ToInt32(s)).ToList())
.ToList();
foreach (List<int> list in listItems)
print(list);
我能够获取子节点的属性,但不能获取主节点的属性。我是 LINQ 和 XML 的新手。
【问题讨论】:
如果这是整个XML,那么Root
就是主节点,你可以通过xdocument.Root.Attributes
获取它的属性。
应该是:.Elements("MAINNODE") 你缺少双引号
是的,刚刚编辑谢谢
Elements("MAINNODE")
查找名为 MAINNODE 的根节点的 children
void Main() var xml = @"如果这是整个XML,那么Root就是主节点,你可以通过xdocument.Root.Attributes
获取它的属性:
string[] listItems = xdocument.Root.Attribute("AONE").Value.Split();
int[] intItems = Array.ConvertAll(listItems, s => Int32.Parse(s));
foreach (int i in intItems)
Console.WriteLine(i);
这将打印出来
22 11 12
另请参阅:Array.ConvertAll<TInput,TOutput>(TInput[], Converter<TInput,TOutput>) Method
注意:如果需要列表,可以从int[] intItems
数组中创建一个
var list = new List<int>(intItems);
或者,不先将字符串数组转换为int数组,直接在调用构造函数时进行转换:
var list = new List<int>(listItems.Select(s => Int32.Parse(s)));
【讨论】:
Int32.Parse()
已本地化,因此在所有语言环境中的行为可能不一致。相反,XmlConvert.ToInt32()
保证正确解析 xs:int
值。以上是关于使用 LINQ 获取 XML 的主要元素属性的主要内容,如果未能解决你的问题,请参考以下文章