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

Kimliği "abc" olan düğümü seçip abv "a" değerini döndürmek istiyorum.LINQ kullanımı XmlNodeList üzerinde

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

Ama çalışmıyor, node ["id"]. InnerText her zaman "". Bir problemin nerede olduğuna işaret edebilir misin?

Çok teşekkürler sizin kod parçacığı için değil benzersiz node değişkenin derlenmiş olmaz neyi gerçeğinden Kenara

+3

Eh, xml düğümü hiçbir iç metne sahip kullanmak gerekir. ' Bu iç metin' dır. Tam özelliği unuttum, ama büyük olasılıkla "node.Attributes [" id "] gibi bir değer. Value ==" abc "' ve 'Select (x => x.Attributes [" abv "]. Value)' – Rob

+0

Thx , gerçekten faydalı –

cevap

5

bir düğüm için InnerText gibi

Olması gereken bir şey <node> ve </node> arasında görünen metindir. Yani, örneğin <Y attributes /> için iç metin yoktur.

Sen node => node.Attributes["id"].Value == "abc"

8

("nerede" yöntemi lambda ikinci aтd ilk linq sorgu dışında), ayrıca kaçırmış Attributes sorgunuzda.

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