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

Chcę wybrać węzeł, którego id to "abc", i zwrócić jego abv "a".użyj LINQ na XmlNodeList

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

Ale to nie podlega programowi prac, węzeł [ "id"]. InnerText jest zawsze "". Czy możesz wskazać, gdzie jest problem?

Thanks a lot

+3

Twój węzeł XML nie ma wewnętrznego tekstu. ' To jest wewnętrzny tekst". Zapomniałem dokładnej właściwości, ale najprawdopodobniej jest to coś w rodzaju 'node.Attributes [" id "] Wartość ==" abc "' i 'Wybierz (x => x.Attributes [" abv "]. Wartość)' – Rob

+0

Thx , naprawdę pomocny –

Odpowiedz

5

InnerText dla węzła jest tekst, który pojawia się między <node> i </node>. Tak więc, na przykład, <Y attributes /> nie ma wewnętrznego tekstu.

Musisz użyć node => node.Attributes["id"].Value == "abc"

8

Abstrahując od faktu, co się fragment kodu nie będzie skompilowany z powodu nie jedynym zmiennej node (pierwszy poza kwerendy LINQ aтd sekund w „gdzie” metoda lambda), masz również nieodebranych Attributes w zapytaniu.

To powinno być coś jak

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