【问题标题】:LINQ to XML getting valueLINQ to XML 获得价值
【发布时间】:2009-09-08 21:39:05
【问题描述】:

这是一个新手问题,但我似乎找不到执行以下操作:

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() 中,我如何获得标题节点的内部值? (在这种情况下,它将是“hello1”)

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

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:
    myString = setNode.Descendants("title").First().Value;
    

    (但是,对于最初的 DescendantNodes 正在做什么,我很模糊;我倾向于更特别了解我正在选择哪些节点)

    【讨论】:

    • 您还可以将 XElement 强制转换为字符串,而不是访问其 Value 属性。这有助于避免在 XElement 引用可能为空的情况下出现空引用错误。例如,如果“title”节点可能存在也可能不存在,您可以这样做: (string)setNode.Descendants("title").FirstOrDefault()
    【解决方案2】:

    我知道这已经得到回答和接受,但我不禁要指出,您可以使用 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多