[英]How to get multiple elements by name in XML using LINQ
我有以下XML:
<?xml version="1.0" standalone="yes"?>
<TestSuite>
<TestCase Name="XXX" ID="123;234; 345; 456">
<CodeBlock />
</TestCase>
<TestCase Name="East" ID="11,22,33, 44, 55">
<CodeBlock />
</TestCase>
</TestSuite>
我需要獲取所有ID並按ID ASC對其進行排序,以下是我的Linq:
var r = (from lv1 in xdoc.Descendants("TestCase")
select new { ID = lv1.Attribute("ID").Value })
.Where(d => d.ID != string.Empty)
.GroupBy(l => l.ID)
.ToList();
我現在得到:
123;234; 345; 456
11,22,33, 44, 55
但是我如何獲得這樣的ID:
11
22
33
44
55
123
234
345
456
目前尚不清楚為什么要進行分組...,您只需要拆分這些值並使用SelectMany
將其展平:
var separators = new[] { ';', ',' };
var r = xdoc.Descendants("TestCase")
.Select(x => (string) x.Attribute("ID"))
.Where(ids => ids != null)
.SelectMany(ids => ids.Split(separators,
StringSplitOptions.RemoveEmptyEntries))
.Select(id => int.Parse(id.Trim()))
.OrderBy(id => id)
.ToList();
請注意,我已經將每個ID解析為整數,原因是,如果將它們視為字符串,則“ 123”位於“ 55”之前。 如果它們實際上不一定是整數,但是您想對可以通過這種方式解析為整數的任何值進行排序,那么排序部分將變得更加棘手。
這可能起作用:
var r = (from lv1 in xdoc.Descendants("TestCase")
select new { ID = lv1.Attribute("ID").Value }).
Where(d => d.ID != string.Empty).OrderBy(l => int.Parse(l.ID)).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.