2009-04-23 53 views
1

獲取的元素我有這個XML文件:LinqToXML:與給定值

<objects> 
    <object> 
    <value>test</value> 
    </object> 
    <object> 
    <value>foo</value> 
    </object> 
    <object> 
    <value>bar</value> 
    </object>  
</objects> 

現在,我要查詢這個XML和檢索的所有對象的元素,其中的價值元素的文本=「 foo「

有沒有簡單的方法來做到這一點?

我已經試過這樣的事情:

var objects = from e in xml.Elements("value") 
       where e.Value.Equals("foo", StringComparison.OrdinalIgnoreCase) 
       select e.parent; 

這並不工作..

+0

你能定義「不起作用」嗎? 它會導致編譯器錯誤嗎?它是否返回一組,空的或其他? – JoshJordan 2009-04-23 18:43:14

+0

「不起作用」,如「枚舉沒有結果」。 – Vegar 2009-04-23 19:46:11

回答

3

我認爲你正在尋找

xml.Descendants("value") 

xml.Elements()只是返回子元素...如果xml是你的根XDocument,它不會返回任何東西。

+0

是的,後代和價值的微調解決了我的問題。謝謝。 – Vegar 2009-04-23 21:12:25

0
var objects = from e in xml.Descendants("object").Elements("value") 
          where e.Value.Equals("foo", StringComparison.OrdinalIgnoreCase) 
          select e.Parent; 
1

假設您正在從文檔根目錄查詢,您應該使用xml.Descendants。此外,我寧願使用string.Equals的Equals方法稱爲關閉的元素的值屬性返回的字符串例如(僅作爲偏好的問題。):

var objects = from e in xml.Descendants("value") 
       where string.Equals(e.Value, 
            "foo", 
            StringComparison.OrdinalIgnoreCase) 
       select e.Parent;