如何从 C# 中的 xml 元素中获取最高值?
Posted
技术标签:
【中文标题】如何从 C# 中的 xml 元素中获取最高值?【英文标题】:How to get highest value from xml element in C#? 【发布时间】:2021-04-10 00:53:11 【问题描述】:我需要从<WBWellIdSegment>
获得最高的<WbDrillPermitNo>
即692753。我使用linq 编写了如下代码,但它同时返回<WBWellIdSegment>
作为结果。请帮我取最大值。
XDocument xml1 = XDocument.Load(File.FullName);
List<XElement> segLists = xml1.Descendants("WBWellIdSegmentList").Descendants("WBWellIdSegment").Elements("WbDrillPermitNo").ToList();
var result = segLists.GroupBy(i => i.Elements("WbDrillPermitNo"),
(i, group) => group.Single(x => x.Element("WbDrillPermitNo").Value == group.Max(y =>
y.Element("WbDrillPermitNo").Value)));
xml文件
<WBWellIdSegmentList>
<WBWellIdSegment>
<WbOilLseNumber>07337</WbOilLseNumber>
<WbOilWellNumber>1486W</WbOilWellNumber>
<WbDrillPermitNo>370746</WbDrillPermitNo>
</WBWellIdSegment>
<WBWellIdSegment>
<WbOilLseNumber>07337</WbOilLseNumber>
<WbOilWellNumber>1486</WbOilWellNumber>
<WbDrillPermitNo>692753</WbDrillPermitNo>
</WBWellIdSegment>
</WBWellIdSegmentList>
【问题讨论】:
目前还不清楚您为什么要使用 GroupBy。鉴于您提供的样本数据,您正在寻找什么确切结果?顺便说一句,您可能会发现 MoreLINQ 中的MaxBy
方法很有用……而且您肯定希望将许可证编号转换为整数,而不是使用字符串比较(就像您的代码现在所做的那样)。
【参考方案1】:
返回最大值(假设该值为整数类型)
wellBore.Descendants("WbDrillPermitNo").Select(e => int.Parse(e.Value)).Max();
要返回元素<WBWellIdSegment>
的最大值来自<WbDrillPermitNo>
,您可以使用Aggregate
方法
var segmentWithMaxNumber = wellBore.Descendants("WBWellIdSegment")
.Select(e => (Element: e, Number: int.Parse(e.Element("WbDrillPermitNo").Value)))
.Aggregate((max, e) => e.Number > max.Number ? e : max, max => max.Element);
【讨论】:
应该是int.Parse
或Int32.Parse
。但这并不能满足 OP 的要求,因为它获取的是最大 Id,而不是具有最大 Id 的元素
@AluanHaddad,也许吧,但 OP 说:请帮我获得最大值 -;)以上是关于如何从 C# 中的 xml 元素中获取最高值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?
如何在将 xml 反序列化为 c# 对象时获取单个 xml 元素的多个值?