【问题标题】:Linq to XML Read and output XML generated from lookup listLinq to XML 读取并输出从查找列表生成的 XML
【发布时间】:2010-04-27 21:10:00
【问题描述】:

我正在尝试使用从 SharePoint 中的查找列表创建的 XML 作为树视图的数据源。它的形式是:

<NewDataSet>
  <test_data>
    <ID>1</ID>
    <Title>MenuItem_1</Title>
    <child_of />    
  </test_data>
  <test_data>
    <ID>2</ID>
    <Title>Subitem_1</Title>
    <Action>http://www.google.com</Action>
    <child_of>MenuItem_1</child_of>   
  </test_data>
  <test_data>
    <ID>3</ID>
    <Title>Subitem_2</Title>
    <Action>http://www.google.com</Action>
    <child_of>MenuItem_1</child_of>
  </test_data>
  <test_data>
    <ID>4</ID>
    <Title>MenuItem_2</Title>
    <child_of />
  </test_data>
  <test_data>
    <ID>5</ID>
    <Title>Subitem_2_1</Title>
    <Action>http://www.google.com</Action>
    <child_of>MenuItem_2</child_of>
  </test_data>
  <test_data>
    <ID>6</ID>
    <Title>Subitem_2_2</Title>
    <Action>http://www.google.com</Action>
    <child_of>MenuItem_2</child_of>
  </test_data>
  <test_data>
    <ID>7</ID>
    <Title>Subitem_2_2_1</Title>
    <Action>http://www.google.com</Action>
    <child_of>Subitem_2_2</child_of>
  </test_data>
</NewDataSet>

可能有 N 层,但项目通过 &lt;child_of&gt; 元素与父级相关。 我似乎无法弄清楚如何在 C# 中编写 LINQ 以正确嵌套菜单项。 朋友推荐我在这里发帖。非常感谢任何帮助。

【问题讨论】:

  • 您使用的是哪个树视图?这是 ASP.NET、WinForms、WPF、Silverlight 吗?您是否希望从您设置为树视图数据源的单个 LINQ 查询返回结果?或者你想用几行代码填充树视图?
  • 嗨丹尼斯 - 感谢您的回复。是的,我希望使用单个查询返回 Silverlight 树视图的数据源。我对这一切(Silverlight 和 LINQ)完全陌生,尽管过去 5 年我一直是使用 c# 的开发人员。

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


【解决方案1】:

你可以做这样的事情,但我会考虑将它实际投入生产代码。

from n in testData.Elements("test_data")
                  .Aggregate(new Dictionary<string, TreeNode<string>>() 
                        {{ string.Empty, new TreeNode<string>() }},
                        (d, e) =>
                        {
                            var curNode = new TreeNode<string>(e.Element("ID").Value);
                            d.Add(e.Element("Title").Value, curNode);
                            d[e.Element("child_of").Value].AddChild(curNode);
                            return d;
                        })
                  .Values
where n.Parent == null
select n;

请注意,这假定一个元素的父键为“空字符串”或在其父元素之后的源列表中。

就我个人而言,我会将这个(尤其是聚合)因素考虑到它自己的方法中。

【讨论】:

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