C# 如何使用LINQ to XML将数据从XML文件显示到ListView?

C# 如何使用LINQ to XML将数据从XML文件显示到ListView?,c#,xml,winforms,linq,lambda,C#,Xml,Winforms,Linq,Lambda,我有一个xml文件,比如 <Root> <Child val1="1" val2="2"/> <Child val1="1" val2="3"/> <Child val1="2" val2="4"/> </Root> 我需要将Xml文件中的数据显示到列表视图中,如 (在索引值中添加了A) 现在我用的是like 1.将数据存储在XmlNodesList 2.然后遍历节点列表,并将属性值添加到列表视图中 这里我不能使用字典作为

我有一个xml文件,比如

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

我需要将Xml文件中的数据显示到列表视图中,如

(在索引值中添加了
A

现在我用的是like

1.将数据存储在
XmlNodesList

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

这里我不能使用
字典
作为临时存储,因为存在多个同名键

使用
linqtoxml
可以做到这一点吗

没有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
}
var doc=new System.Xml.XmlDocument();
doc.LoadXml(xml);
变量节点=doc.SelectNodes(“根/子节点”);
for(int i=0;i
使用LINQ:

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);
使用System.Linq;
var doc=new System.Xml.XmlDocument();
doc.LoadXml(xml);
变量节点=doc.SelectNodes(“根/子节点”);
var arr=节点
第()类
.ToArray();
var结果=arr
.选择(n=>
新的
{
ClNo=String.Format(“A{0}”,Array.IndexOf(arr,n)+1),
Val1=n.属性[“Val1”].值,
Val2=n.属性[“Val2”].值,
});
ListView列表=新建ListView();
ListViewItem[]项=结果
.Select(r=>newlistViewItem(new[]{r.ClNo,r.Val1,r.Val2})
.ToArray();
list.Items.AddRange(Items);
不带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
}
var doc=new System.Xml.XmlDocument();
doc.LoadXml(xml);
变量节点=doc.SelectNodes(“根/子节点”);
for(int i=0;i
使用LINQ:

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);
使用System.Linq;
var doc=new System.Xml.XmlDocument();
doc.LoadXml(xml);
变量节点=doc.SelectNodes(“根/子节点”);
var arr=节点
第()类
.ToArray();
var结果=arr
.选择(n=>
新的
{
ClNo=String.Format(“A{0}”,Array.IndexOf(arr,n)+1),
Val1=n.属性[“Val1”].值,
Val2=n.属性[“Val2”].值,
});
ListView列表=新建ListView();
ListViewItem[]项=结果
.Select(r=>newlistViewItem(new[]{r.ClNo,r.Val1,r.Val2})
.ToArray();
list.Items.AddRange(Items);

@abatishchev:Yes…编辑的标题:-)最好使用标记而不是标题;)顺便说一句,
A1、A2、A3
来自哪里?@abatishchev:`1,2,3`是索引值(对于循环(“A”+(index+1)。ToString()@abatishchev:Yes…编辑的标题:-)最好使用标记而不是标题;)顺便说一句,A1、A2、A3从哪里来?@abatishchev:`1,2,3`是索引值(for loop(“A”+(index+1).ToString())@abatishchev:
Populate()
-我不理解这一点,我的意思是
Populate()
返回XML文件中的
XmlNodeList
数据,例如
doc.SelectNodes(“根/子节点”)
@abatishchev:谢谢,但它会抛出一个错误,如
无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明。
我使用的是.NET 3.5 frame work@abatishchev:不,它也会抛出相同的错误。我想我们不能使用ListView属性(ColumnName)作为匿名类型variable@Pramodh:什么错误和什么字符串?代码对我来说很好!@abatishchev:
Populate()
-我不理解这一点,我的意思是
Populate()
从XML文件返回
XmlNodeList
数据,例如
doc.SelectNodes(“根/子节点”)
@abatishchev:谢谢,但它会抛出一个错误,如
无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明。
我使用的是.NET 3.5 frame work@abatishchev:不,它也会抛出相同的错误。我想我们不能使用ListView属性(ColumnName)作为匿名类型variable@Pramodh:什么错误和什么字符串?代码对我来说很好!