c#xml转换成datagrid不同级别的子级

本文关键字:转换 datagrid c#xml | 更新日期: 2023-09-27 18:19:55

我需要使用类似的xml

<jobpost id='01'>
    <candidate id='0000079'>
        <firstName>AAAA</firstName>
        <lastName>BBBB</lastName>
        <age>32</age>
        <salaryoff>37000</salaryoff>
        <exp>C</exp>
        <cat>
            <award>5</award>
            <hst>5</hst>
            <previous>7</previous>
            <flex>3</flex>
            <travel>4</travel>
        </cat>
    </candidate>
    <candidate id='0000072'>
        <firstName>CCCCC</firstName>
        <lastName>DDDDD</lastName>
        <age>37</age>
        <salaryoff>40000</salaryoff>
        <exp>B</exp>
        <cat>
            <award>6</award>
            <hst>5</hst>
            <previous>6</previous>
            <flex>2</flex>
            <travel>3</travel>
        </cat>
    </candidate>        
</jobpost>

并以这种格式显示在数据网格中

name    last    age exp awa hst pre fle tra salaryoff
AAAA    BBBB    32  C   5   5   7   3   4   37000
CCCCC   DDDDD   37  B   6   5   6   2   3   40000

我试过这样的

XmlReader xmlFile = XmlReader.Create(my_path + "jobpost.xml", new XmlReaderSettings());
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlFile);
candidati.DataSource = dataSet;
candidati.DataMember = "cat";
xmlFile.Close();

但我只设法得到一部分信息,因为我需要

awa hst pre fle tra
5   5   7   3   4
6   5   6   2   3

candidati.DataMember = "candidate";

name    last    age exp salary  
AAAA    BBBB    32  C   37000
CCCCC   DDDDD   37  B   40000

在进入循环的循环之前:)和导航我想知道是否有某种方法可以根据我的需要用一些我不知道的结构来组织数据,从现在起我就没有找到。

thx,如果你已经到达这里:)

c#xml转换成datagrid不同级别的子级

您可以尝试使用LINQ压平结果,然后将结果绑定到DataGrid

编辑

我对LINQ to XML还很陌生,但这确实是我所理解的。

XDocument doc = XDocument.Load(@"XMLFile.xml");
            var query = from c in doc.Root.Descendants("candidate")
                        let cat = c.Element("cat")
                        select new
                        {
                            FirstName = c.Element("firstName").Value,
                            LastName = c.Element("lastName").Value,
                            Age = c.Element("age").Value,
                            Salary = c.Element("salaryoff").Value,
                            Exp = c.Element("exp").Value,
                            Award = cat.Element("award").Value,
                            Hst = cat.Element("hst").Value,
                            Previous = cat.Element("previous").Value,
                            Flex = cat.Element("flex").Value,
                            Travel = cat.Element("travel").Value,
                        };
            dgv.DataSource = query.ToList();