能否无需循环直接从XML文档声明并填充C#字符串数组?
在C#中快速从XML提取属性到字符串数组
当然可以实现!而且完全不用手动写循环,C#里的LINQ能帮我们用简洁的代码搞定这个需求,比你设想的简化写法更顺畅。
给你两种常用的实现方案:
方案一:用LINQ to XML(推荐,更现代的XML处理方式)
// 加载XML文档(也可以用Parse方法加载字符串形式的XML) XDocument xDoc = XDocument.Load("你的XML文件路径"); // 一行提取所有<a>标签的href属性到字符串数组 string[] myArray = xDoc.Descendants("a") .Select(a => a.Attribute("href")?.Value) .Where(value => value != null) // 过滤掉没有href属性的<a>标签 .ToArray();
方案二:沿用XmlDocument对象模型(和你VBA的写法更接近)
如果你习惯用XmlDocument,也可以用LINQ简化循环逻辑:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("你的XML文件路径"); string[] myArray = xmlDoc.SelectNodes("//a") .Cast<XmlNode>() // 将XmlNodeList转成LINQ可处理的泛型集合 .Select(node => node.Attributes["href"]?.InnerText) .Where(value => value != null) .ToArray();
补充说明
- 用
?.运算符是为了避免空引用异常:如果某个<a>标签没有href属性,代码会返回null而不是直接报错,后面的Where会自动过滤这些空值 - 你之前写的
xmlDoc.SelectNodes("//a").Attributes.getNamedItem("href").Text无法运行,是因为SelectNodes返回的是一组节点,不是单个节点,必须逐个处理每个节点的属性才行 - 两种方案都不需要手动写
foreach,LINQ已经帮我们封装了循环逻辑
内容的提问来源于stack exchange,提问作者jamheadart
相关产品推荐
相关产品推荐

