代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何使用linqtoxml将数据从XML文件显示到ListView?

  •  1
  • Thorin Oakenshield  · 技术社区  · 14 年前

    <Root>
     <Child val1="1" val2="2"/>
     <Child val1="1" val2="3"/>
     <Child val1="2" val2="4"/>
    </Root>
    

    alt text

    (已添加) A

    现在我用的是

    1.将数据存储在 XmlNodesList

    2.然后遍历 nodeslist 并将属性值添加到列表视图中

    这里我不能用 Dictionary<String,String> 作为临时存储,因为存在多个同名密钥。

    LINQ to XML .?

    1 回复  |  直到 14 年前
        1
  •  1
  •   abatishchev Karl Johan    14 年前

    没有LINQ:

    var doc = new System.Xml.XmlDocument();
    doc.LoadXml(xml);
    
    var nodes = doc.SelectNodes("Root/Child");
    
    for (int i = 0; i < nodes.Count; i++)
    {
        var n = nodes[i];
        var index = String.Format("A{0}", i + 1);
        var column1 = n.Attributes["val1"].Value;
        var column2 = n.Attributes["val1"].Value;
    
        // use variables to add an item to ListView
    }
    

    using System.Linq;
    
    var doc = new System.Xml.XmlDocument();
    doc.LoadXml(xml);
    
    var nodes = doc.SelectNodes("Root/Child");
    var arr = nodes
        .OfType<XmlNode>()
        .ToArray();
    
    var result = arr
        .Select(n =>
            new
            {
                ClNo = String.Format("A{0}", Array.IndexOf(arr, n) +1),
                Val1 = n.Attributes["val1"].Value,
                Val2 = n.Attributes["val2"].Value,
            });
    
    ListView list = new ListView();
    ListViewItem[] items = result
        .Select(r => new ListViewItem(new[] { r.ClNo, r.Val1, r.Val2 })
        .ToArray();
    list.Items.AddRange(items);