C# 如何使用LINQ to XML将数据从XML文件显示到ListView?
我有一个xml文件,比如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.然后遍历节点列表,并将属性值添加到列表视图中 这里我不能使用字典作为
<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:什么错误和什么字符串?代码对我来说很好!