2009-09-08 3 views
2

Это новичок вопрос, но я не могу показаться, чтобы найти, чтобы сделать следующее:LINQ, чтобы получить значение XML

XML это -

<sets><set><title>hello1</title><images><image>1667</image></images></set></sets> 

    foreach (XElement setNode in collectionXML.DescendantNodes()) 
    { 
     myString = setNode.Descendants("title").First().... 
    } 

From First(), как я получаю внутренний значение узла заголовка? (В данном случае это было бы «hello1»)

Вызов ToString() на выходах элементов «hello1», что, очевидно, не совсем то, что я хочу

ответ

4
myString = setNode.Descendants("title").First().Value; 

(однако, я очень туманная, как к тому, что первоначальный DescendantNodes делает, я, как правило, немного более частности о том, какие узлы я)

выборе
+0

Как я пропустил это ?! Спасибо – qui

+0

Вы также можете использовать XElement для строки вместо доступа к свойству Value. Это может помочь избежать нулевых опорных ошибок в ситуациях, когда ссылка XElement может быть нулевой. Например, если узел «title» может присутствовать или отсутствовать, вы можете сделать: (string) setNode.Descendants («title»). FirstOrDefault() –

0

Я знаю, что это уже был ответ принят, но я не могу помочь, но точка что вы можете делать больше с LINQ.

collectionXML 
    .Elements("sets") 
    .Elements("set") 
    .Select(c => c) 
    .Each(x => SetValue(x)); 

void SetValue(XElement element) 
{ 
    myString = element.GetElementValue("title"); 
} 

// Each extension method (needs to be in a static class) 
public static void Each<T>(this IEnumerable<T> items, Action<T> action) 
{ 
    foreach (var item in items) action(item); 
} 
Смежные вопросы