2009-04-23 5 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

+0

«не работает», как в «Перечислении не дал никаких результатов». – Vegar

ответ

3

Я думаю, что вы ищете

xml.Descendants("value") 

xml.Elements() просто возвращает дочерние элементы ... если xml является вашим корневым XDocument, он ничего не вернет.

+0

Да, потомки и обрезка ценности решили мою проблему. Благодарю. – Vegar

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 над РАВНО методом, называемым из строки, возвращаемой Value свойства элемента, например (только как вопрос предпочтения.):

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

По какой-то причине я закончил использование string.Equals() ... – Vegar

Смежные вопросы