繁体   English   中英

使用LINQ将csv转换为xml

[英]csv to xml using LINQ


我有一个ac#代码,其中有一个包含客户数据的csv文件,如下所示:

ClientNumber1,Name1, BenefitCode1, EffectiveDt1 
ClientNumber1,Name1, BenefitCode2, EffectiveDt2 
ClientNumber2,Name2, BenefitCode3, EffectiveDt3 

现在,在这种情况下,我希望输出XML在同一客户中具有Benefit多个标记(例如,csv中的前两行具有相同的customer,但是有两个不同的Benefit

我的输出xml应该像

<Member>
<Num>ClientNumber1<Num>
<Nm>Name1</Nm>
 <Benefit>
  <Bc>BenefitCode1</Bc>
  <Dt>EffectiveDt1</Dt>
 </Benefit>
 <Benefit>
  <Bc>BenefitCode2</Bc>
  <Dt>EffectiveDt2</Dt>
 </Benefit>
</Member>
<Member>
<Num>ClientNumber1<Num>
<Nm>Name2</Nm>
 <Benefit>
   <Bc>BenefitCode3</Bc>
   <Dt>EffectiveDt3</Dt>
 </Benefit>
</Member>

因此,基本上,在执行LINQ时,我还应该能够使用以前的ClientNum进行检查,并且如果我具有相同的num,则应该在相同的Member标记中添加收益数据。

谢谢。

我将其分为两个明显分开的步骤:

1)从文件创建数据表示-通过创建匿名类型(按客户编号分组):

var data = File.ReadAllLines(@"C:\Desktop\test.csv")
               .Select(line => line.Split(','))
               .Select(parts => new
                {
                    ClientNumber = parts[0].Trim(),
                    Name = parts[1].Trim(),
                    BenefitCode = parts[2].Trim(),
                    EffectiveDate = parts[3].Trim()
                })
                .GroupBy(x => x.ClientNumber);

2)将数据另存为XML:

var xml = new XDocument(
        new XElement("SomeRoot",
                output.Select(e => new XElement("Member",
                        new XElement("Num", e.Key),
                        new XElement("Name", e.First().Name),
                        e.Select(x => new XElement("Benefit",
                            new XElement("Bc", x.BenefitCode),
                            new XElement("Dt", x.EffectiveDate)))
                    ))
            )
    );

然后您可以使用xml.Save(...)将其保存到文件中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM