【发布时间】:2021-06-10 10:56:58
【问题描述】:
我有一个这样的 XML 示例:
<prs>
<pr number="1">
<revisions>
<revision revNum="0"></revision>
<revision revNum="1"></revision>
<revision revNum="2"></revision>
</revisions>
</pr>
<pr number="2">
<revisions>
<revision revNum="0"></revision>
<revision revNum="1"></revision>
</revisions>
</pr>
<pr number="3">
<revisions>
<revision revNum="0"></revision>
</revisions>
</pr>
</prs>
我想从每个<pr> 元素中选择<revision> 元素,其中子元素<revision> 的@revNum 属性最大。
所以返回的列表是这样的:
<revision revNum="2"></revision> >> Child of pr with @number=1
<revision revNum="1"></revision> >> Child of pr with @number=2
<revision revNum="0"></revision> >> Child of pr with @number=3
所以我尝试了这段代码:
XDocument testDoc = XDocument.Load("sample.xml");
IEnumerable<XElement> revQuery =
from rev in (testDoc.Descendants("pr").Select(pr => pr)).Descendants("revision")
where int.Parse(rev.Attribute("revNum").Value) ==
rev.Parent.Elements("revision").Max(revNum => int.Parse(revNum .Attribute("revNum").Value))
select rev;
结果是好的,至少单元测试是这么说的,但我不确定查询是否写得好。
【问题讨论】:
-
使用
MinBy会更好——这不是 linq 的一部分(很烦人),但你自己写很容易——在 SO 上有很多很好的实现
标签: c# xml linq-to-xml