微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Linq to Xml通过递归查询获取树数据?

如何解决如何使用Linq to Xml通过递归查询获取树数据?

| 我从静态服务中获取以下类型的xml数据:
<nodeData>  
  <nodeObject>  
    <nodeName>Node 1</nodeName>
    <nodechildren>
      <nodeObject>
        <nodeName>Node 1-1</nodeName>
        <nodechildren>
          <nodeObject>
            <nodeName>Leaf 1-1-1</nodeName>
          </nodeObject>
          <nodeObject>
            <nodeName>Leaf 1-1-2</nodeName>
          </nodeObject>
          <nodeObject>
            <nodeName>Leaf 1-1-3</nodeName>
          </nodeObject>
          <nodeObject>
            <nodeName>schedule 4.pdf</nodeName>
          </nodeObject>
        </nodechildren>
      </nodeObject>
      <nodeObject>
        <nodeName>Node 1-2</nodeName>
        <nodechildren>
          <nodeObject>
            <nodeName>Leaf 1-2-1</nodeName>
          </nodeObject>
        </nodechildren>
      </nodeObject>
    </nodechildren>
  </nodeObject>
  <nodeObject>
    <nodeName>Node 2</nodeName>
    <nodechildren>
      <nodeObject>
        <nodeName>Node 2-1</nodeName>
        <nodechildren>
          <nodeObject>
            <nodeName>Leaf 2-1-1</nodeName>
          </nodeObject>
        </nodechildren>
      </nodeObject>
    </nodechildren>
  </nodeObject>
......
</nodeData> 
所以我想获取树数据以填充sliverlight中的树视图。我所做的如下: 创建一个内部类:
public class nodeObject
    {
        public string nodeName { get; set; }
        public IEnumerable<nodeObject> nodechildren { get; set; }
    }
将Linq写为:
void proxy_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                XDocument xml = XDocument.Parse(e.Result);
                var dataSource = (from results in xml.Descendants(\"nodeObject\")
                                  select new nodeObject
                                  {
                                    nodeName = results.Element(\"nodeName\").Value.ToString(),nodechildren = this.GetChilden(results)
                                  });

                this.dataTree.ItemsSource = dataSource.ToList();             
            }
        }

        private IEnumerable<nodeObject> GetChilden(XElement parent)
        {
            return (from results in parent.Descendants(\"nodeObject\")
                    select new nodeObject
                    {
                        nodeName = results.Element(\"nodeName\").Value.ToString(),}).ToList<nodeObject>();
        }
然后运行silverlight应用程序。数据在treevew中显示为(仅2个级别,重复很多):
Node 1
  Node 1-1
  Leaf 1-1-1
  Leaf 1-1-2
  Leaf 1-1-3
  Node 1-2
  Leaf 2-1-1
Node 1-1
  Leaf 1-1-1
  Leaf 1-1-2
  Leaf 1-1-3
  Node 1-2
  Leaf 2-1-1
Node 1-2
  Leaf 2-1-1
Node 2
  Node 2-1
  Leaf 2-1-1
Node 2-1
  Leaf 2-1-1
但是预期的显示应该像(没有叶子):
Node 1
  Node 1-1
  Node 1-2
Node 2
  Node 2-1
或喜欢(包括叶子):
Node 1
  Node 1-1
    Leaf 1-1-1
    Leaf 1-1-2
    Leaf 1-1-3
  Node 1-2
    Leaf 2-1-1
Node 2
  Node 2-1
    Leaf 2-1-1
如何解决这个问题?     

解决方法

        想通了:这是因为xaml中的绑定问题。 Linq查询很好。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。