-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

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 に答える