2013-04-18 1 views
0

У меня есть этот файл app.config:какой-то вопрос в этом LINQ к XML-запрос, при получении значения атрибута определенного в элементе

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 

    <add key="domain" value="localhost"/> 

    <add key="hostname" value="hostpc"/> 

</appSettings> 
</configuration> 

Я использую этот LINQ для запроса XML, чтобы получить значение ключа названный «домен». Например, когда я говорю, я хочу, чтобы получить значение ключа с именем «домен» он должен дать мне «локальный»:

var domain = (from appNode in xmlElement.Elements("add") 
        where appNode.Attribute("key").Value == "domain" 
        select appNode.Attribute("value")); 

Но мой запрос не хватает кое-кто может определить, что я отсутствует или, как это может быть сделанный лучше, он не работает в данный момент.

Примечание: Я только хочу использовать LINQ для XML

ответ

0

Я использовал ваше содержимое файла app.config, как она есть, написать небольшое приложение на основе консоли со следующими код:

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Create the query 
     var nodes = from appNode in XElement.Load("App.config").Descendants("appSettings").Elements() 
        where appNode.Attribute("key").Value == "domain" 
        select appNode; 

     var element = nodes.FirstOrDefault(); 
     string value = element.Attribute("value").Value; 

     Console.WriteLine(value); 

     //Pause the application 
     Console.ReadLine(); 
    } 
} 

выход: локальный

Надеется, что это помогает. Если он не работает на вашем компьютере, сообщите об ошибке.

+0

нет, что не работает ошибка такая же, как у меня – nzdev

+0

Какая ошибка вы получаете? – SBirthare

+0

я отладки и возвращает значение этого для домена \t \t \t домен {System.Linq.Enumerable.WhereEnumerableIterator } \t System.Collections.Generic.IEnumerable {System.Linq.Enumerable.WhereEnumerableIterator } – nzdev

0

попробуйте использовать этот один:

XElement doc = XElement.Load("ConsoleApplication1.exe.config"); 

    var domain = (from appNode in doc.Element("appSettings").Elements("add") 
        where appNode.Attribute("key").Value == "domain" 
        select appNode.Attribute("value").Value).FirstOrDefault();