如何使用C#的XPath将XML文件的嵌套循环简化至最简形式
简化XML处理代码的方案
当然可以简化你的XML处理代码,用LINQ to XML替代传统的XmlDocument+XPath组合,再配合变量推断、异步优化,能大幅减少冗余行数,逻辑也更直观:
// 简化HTTP请求流程 var someRequest = GetHttpRequestMessage(new Uri(baseUri, someUrl)); log.Debug($"Calling URL: {someUrl}"); var httpResponse = await httpClient.SendAsync(someRequest); httpResponse.EnsureSuccessStatusCode(); var someXml = await httpResponse.Content.ReadAsStringAsync(); // 直接解析XML并遍历目标节点 foreach (var targetElement in XDocument.Parse(someXml).Descendants("something")) { // ...这里写原循环内的处理代码 }
关键简化细节:
- 去掉冗余变量:用
var自动推断类型,省去XmlDocument、XPathNavigator、XPathNodeIterator等多余的中间变量声明 - 替换XML解析方式:
XDocument(LINQ to XML)的Descendants方法可以直接定位所有名为something的子节点,不需要创建XPath导航器和迭代器 - 优化异步调用:把阻塞式的
.Result换成await,既避免线程阻塞,代码也更简洁(注意要将当前方法标记为async) - 简化字符串格式化:用C#字符串插值
$"..."替代String.Format,写法更直观
并行处理优化
如果循环内的逻辑适合并行执行,直接基于LINQ结果做并行遍历即可:
var targetNodes = XDocument.Parse(someXml).Descendants("something").ToList(); Parallel.ForEach(targetNodes, element => { // ...并行处理逻辑 });
内容的提问来源于stack exchange,提问作者Adam Mohammed Dabdoub
相关产品推荐
相关产品推荐

