2009-09-08 61 views
2

这是一个新手的问​​题,但我似乎无法找到执行以下操作:的LINQ to 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().... 
    } 

从第(),我怎么弄内标题节点的值? (在这种情况下,这将是“hello1”)的元素会产生“hello1”

调用toString(),这显然是不太什么,我想

回答

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

(不过,我很含糊不清,什么初始DescendantNodes所做的事。我会倾向于多一点特定哪些节点我选择)

+0

我怎么错过了这个?谢谢 – qui 2009-09-08 11:59:16

+0

您也可以将XElement转换为字符串,而不是访问其Value属性。这可以帮助在XElement引用可能为空的情况下避免空引用错误。例如,如果“标题”节点可能存在也可能不存在,你可以这样做:(string)setNode.Descendants(“title”)。FirstOrDefault() – 2009-09-08 16:39:13

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