【问题标题】:LINQ to XML: Project to a List<string>LINQ to XML:项目到列表<string>
【发布时间】:2012-10-02 05:14:19
【问题描述】:

使用 LINQ to XML,我如何将以下 XML 数据投影到具有值“Test1”、“Test2”和“Test3”的List&lt;string&gt;

<objectlist>
    <object code="Test1" />
    <object code="Test2" />
    <object code="Test3" />
</objectlist>

我有一个可用的 XML 字符串:

XDocument xlist = XDocument.Parse(xmlData);

谢谢

【问题讨论】:

  • 你试过什么? (这很简单,但重要的是要学会自己先尝试,并在提出问题时报告。)
  • 你试过什么?这是微不足道的,这里有很多关于这个的问题。

标签: c# xml linq linq-to-xml


【解决方案1】:
var query = from node in xlist.Root.Elements("object")
            select node.Attribute("code").Value

var result = query.ToList();

或者,使用扩展方法语法:

var query = xlist.Root.Elements("object")
               .Select(node => node.Attribute("code").Value)
               .ToList()

【讨论】:

  • 为什么在这里使用查询表达式?与扩展方法调用相比,它只是增加了噪音。
  • 它在复杂的查询中起作用 - 但这里它增加了噪音,特别是因为你之后想打电话给ToList()。我通常发现,如果您只是执行SelectWhere,查询表达式比扩展方法语法更嘈杂。
  • Davenewza,当你一开始不知道如何链接它时,你怎么能更喜欢它......我很困惑......?
  • 我添加了扩展方法变体进行比较,但我仍然偏爱查询表达式。我认为是 lambda 让我失望了……另外,我喜欢查询定义与查询评估分开的事实 (ToList())。不过,每个人都有权发表自己的意见 :-)
  • 可以理解..我很抱歉
【解决方案2】:
var xDoc = XDocument.Parse(xml);
List<string> codes = xDoc.Descendants("object")
                        .Select(o => o.Attribute("code").Value)
                        .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多