Linq to XML C#在datagridview中向父节点添加父节点

时间:2013-06-26 19:02:13

标签: xml linq datagridview

我不确定我是否正确地提出了这个问题,但我正试图让“Jim”使用下面的xml doc在数据网格中显示他的两个作业。 我的预期结果:

Jim, male, mechanic,joe's shop
Jim, male, janitor, microsoft

XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<Employment>
    <Person>
        <Name>
            <![CDATA[Jim]]>
        </Name>
        <Gender>
            <![CDATA[male]]>
        </Gender>
        <Jobs>
            <Job>
                <Title>
                    <![CDATA[mechanic]]>
                </Title>
                <Company>
                    <![CDATA[joe's shop]]>
                </Company>
            </Job>
            <Job>
                <Title>
                    <![CDATA[janitor]]>
                </Title>
                <Company>
                    <![CDATA[microsoft]]>
                </Company>
            </Job>
        </Jobs>
    </Person>
</Employment>

1 个答案:

答案 0 :(得分:0)

使用LINQ2XML获取数据可以这样完成(变量xmlSource保存xml代码):

var xml = XElement.Parse(xmlSource);
var jobs = xml.Descendants("Job").ToList();
var person = xml.Element("Person").Elements("Name").First().Value;
foreach (var job in jobs)
{
    Console.WriteLine(string.Format("{0} - {1}", person, job.Element("Title").Value));
}

对于DataGridView:为每个Person添加新行,为每个职位/公司添加新Cell或创建一个简单数据源,用数据填充并将其提供给DataGridView对象。

创建数据对象类

public class Person
{
    public string Name { get; set; }
    public string Title { get; set; }
    public string Company { get; set; }
}

创建人员列表,用XML中的数据填充它,并将其设置为DataGridView的数据源:

var persons = new List<Person>();
var xml = XElement.Parse(xmlSource);
var jobs = xml.Descendants("Job").ToList();
var person = xml.Element("Person").Elements("Name").First().Value;
foreach (var job in jobs)
{
    persons.Add(new Person 
    {
        Name = person,
        Title = job.Element("Title").Value,
        Company = job.Element("Company").Value
    });
}

dataGridViewControl.DataSource = persons;

enter image description here