代码之家  ›  专栏  ›  技术社区  ›  Chris James

LINQ到XML获取值

  •  2
  • Chris James  · 技术社区  · 15 年前

    这是一个新手问题,但我似乎无法做到以下几点:

    这是XML吗-

    <sets><set><title>hello1</title><images><image>1667</image></images></set></sets>
    
        foreach (XElement setNode in collectionXML.DescendantNodes())
        {
            myString = setNode.Descendants("title").First()....
        }
    

    从First()开始,如何获取title节点的内部值?(在这种情况下,它将是“hello1”)

    对元素调用ToString()会产生“hello1”,这显然不是我想要的

    2 回复  |  直到 15 年前
        1
  •  4
  •   Marc Gravell    15 年前
    myString = setNode.Descendants("title").First().Value;
    

    DescendantNodes 特指的 关于我正在选择的节点)

        2
  •  0
  •   Ty.    15 年前

    我知道这个问题已经得到了回答和接受,但我不得不指出,你可以在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);
    }