0

我需要像这样工作的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 如果你已经到了这里:)

4

1 回答 1

0

您可以尝试使用 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();
于 2013-06-24T22:14:44.240 回答