簡體   English   中英

如何使用LINQ在XML中按名稱獲取多個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM