C#Lambda方法语法,以获取与LINQ to XML中的模式匹配的属性值

时间:2019-02-04 23:03:42

标签: c# xml linq lambda linq-to-xml

我有以下XML片段,并希望提取不为零的状态属性值。我可以获得符合条件的元素,但我真正想要的是状态属性的值。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
    <Auth status = "0">Moo</Auth>
    <Add status = "817">Cow</Add>
    <Add status = "888">Brown</Add>
    <Add status = "123">Dog</Add>
</response>

这种lambda语法会带回匹配元素的列表,但我需要的是状态值的列表,而不是具有这些值的元素的列表。

var errcodeList = xml.Descendants("Add").Where(x => x.Attribute("status").Value != "0").Attributes("status");

2 个答案:

答案 0 :(得分:1)

您可以使用Select将集合投影到所需的特定结果。例如:

var errcodeList = xml.Descendants("Add").Where(x => x.Attribute("status").Value != "0").Select(x => x.Attribute("status").Value);

答案 1 :(得分:1)

这只是一个猜测,但这可能对您有用。当您使用Widget build(BuildContext context) { return SomeStatefulWidget( key: UniqueKey(), ); } 时,您正在将Select投影为另一种形式,在这种情况下,其列表为IEnumerable

x.Attributes("status").Value