Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ在XML中按名称获取多个元素_C#_Xml_Linq - Fatal编程技术网

C# 如何使用LINQ在XML中按名称获取多个元素

C# 如何使用LINQ在XML中按名称获取多个元素,c#,xml,linq,C#,Xml,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 /> &l

我有以下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>         
我现在得到:

123;234; 345; 456
11,22,33, 44, 55
但是我怎样才能得到像这样的ID:

11
22
33
44
55
123
234
345
456
这可能会奏效:

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();
这可能会奏效:

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();

不清楚你为什么要分组。。。您只需拆分这些值,并根据其外观将其展平:

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 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之前。如果它们实际上不一定是整数,但您希望对任何可以被解析为整数的值进行排序,那么排序部分就变得更复杂了。

是ID Int type还是string type?string type,因为某些ID可能是string。非常准确的是,您已经包含了您的xml。是ID Int type还是string type?string type,由于某些ID可能是字符串,因此您包含的xml非常准确;234; 345; 456.这是正确的想法。。现在只需更改最后一个OrderByl=>int.Prasel.ID.ToString.Replace+1我很困惑,l.ID.ToString.Replace;,返回字符串,如何将其解析为int?是的,它将返回不带分号的字符串。可解析为integerInput字符串的格式不正确,123;234; 345; 456.这是正确的想法。。现在只需更改最后一个OrderByl=>int.Prasel.ID.ToString.Replace+1我很困惑,l.ID.ToString.Replace;,返回字符串,如何将其解析为int?是的,它将返回不带分号的字符串。可以解析为整数的