如何从 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();

要返回元素&lt;WBWellIdSegment&gt; 的最大值来自&lt;WbDrillPermitNo&gt;,您可以使用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.ParseInt32.Parse。但这并不能满足 OP 的要求,因为它获取的是最大 Id,而不是具有最大 Id 的元素 @AluanHaddad,也许吧,但 OP 说:请帮我获得最大值 -;)

以上是关于如何从 C# 中的 xml 元素中获取最高值?的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 中的 XML 字符串中获取元素列表

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?

从C#中的xml字符串获取元素[重复]

如何在将 xml 反序列化为 c# 对象时获取单个 xml 元素的多个值?

如何从 C# 中的通用 List<T> 中获取元素? [复制]

LINQ to XML:如何在 C# 中获取元素值?