2015-12-01 18 views
6
<X version="1.0"> 
    <Y id="abc" abv="a"/> 
    <Y id="edf" abv="e"/> 
</X> 

idが "abc"のノードを選択し、そのabv "a"を返したいとします。XmlNodeListでLINQを使用する

XmlDocument doc = new XmlDocument(); 
doc.Load(filePath); 
XmlNodeList list = doc.SelectNodes("X/Y"); 
var node = list.Cast<XmlNode>().Where(node => node["id"].InnerText == "abc") 
           .Select(x=>x["abv"].InnerText); 

しかし、ノード["id"]は動作しません。InnerTextは常に ""です。あなたはどこに問題があるかを指摘できますか?

どうもありがとう、あなたのコードスニペットが原因ではないユニークなnode変数のコンパイルされないだろうかという事実は別に

+3

まあ、あなたのXMLノードには内部テキストがありません。 'これは内部のテキスト'です。私は正確なプロパティを忘れていましたが、 'node.Attributes [" id "]。Value ==" abc "'と 'Select(x => x.Attributes [" abv "] .Value)' – Rob

+0

Thx 、本当に役に立つ –

答えて

5

ノード用InnerTextよう

それがあるべき何かが<node></node>の間に表示されるテキストです。したがって、たとえば<Y attributes />の場合、内部テキストはありません。

あなたは使用する必要がありますnode => node.Attributes["id"].Value == "abc"

8

(「どこで」方式のラムダに二aтd最初のLINQクエリの外に)、あなたも見逃していますあなたの質問にAttributes

var node = list.Cast<XmlNode>() 
       .Where(n => n.Attributes["id"].InnerText == "abc") 
       .Select(x => x.Attributes["abv"].InnerText);