-1

我的 XML 看起来是这样的:

<sensor>
<data>26.7</data>
<data>54.53</data>
<log>false</log>
</sensor>

要检索列表中的数据字段,我使用:

List<string> list = xml.Root.Descendants("sensor").Elements("data").Select(element => element.Value).ToList();

而且效果很好。

有时 XML 看起来像这样(log = true):

<sensor>
<data>26.7</data>
<data>54.53</data>
<log>true</log>
</sensor>

我想忽略这些价值观。我怎样才能做到这一点?

我试过这个:

 var lastUser = xml.Element("response").Descendants("sensor")
                   .First(u => u.Element("data") != null
                                    && u.Element("log").Value == "false");

但我当然只能检索第一个值。

4

3 回答 3

6

First如果您不想选择第一个元素,为什么要使用?改为使用Where

var data = xml.Element("response")
              .Descendants("sensor")
              .Where(x => ((string)x.Element("log")) == "false")
              .Elements("data")
              .Select(x => x.Value)
              .ToList();
于 2013-07-25T06:50:08.847 回答
0

为什么不使用.Where而不是.First你应该得到一个数组?

于 2013-07-25T06:50:54.173 回答
0

使用转换节点 tobool或 to double

 var data= xml.Element("response").Descendants("sensor")
              .Where(s => (bool)s.Element("log"))
              .Elements("data")
              .Select(d => (double)d)
              .ToList(); // produces List<double>

是的,@Daniel 是对的 -First仅返回与您的条件匹配的序列中的第一个元素。

也考虑使用 XPath

var data = xdoc.XPathSelectElements("response/sensor[log='true']/data")
               .Select(d => (double)d)
               .ToList();
于 2013-07-25T06:51:59.480 回答