将CSV文件转换为XML

Soe*_*ren 11 c# xml csv

我需要将CSV转换为XML文档.到目前为止我看到的示例都显示了如何使用CSV中的固定数量的列进行此操作.

到目前为止,我使用LINQ:

String[] File = File.ReadAllLines(@"C:\text.csv");

        String xml = "";

        XElement top = new XElement("TopElement",

        from items in File

        let fields = items.Split(';')

        select new XElement("Item",

        new XElement("Column1", fields[0]),

        new XElement("Column2", fields[1]),

        new XElement("Column3", fields[2]),

        new XElement("Column4", fields[3]),

        new XElement("Column5", fields[4])

        )

        );

        File.WriteAllText(@"C:\xmlout.xml", xml + top.ToString());
Run Code Online (Sandbox Code Playgroud)

这适用于固定数量的列,但我的.CSV在每行上具有不同的列数.

根据.CSV每行中有多少单词(列),你会如何适应某种循环呢?

日Thnx

dtb*_*dtb 27

var lines = File.ReadAllLines(@"C:\text.csv");

var xml = new XElement("TopElement",
   lines.Select(line => new XElement("Item",
      line.Split(';')
          .Select((column, index) => new XElement("Column" + index, column)))));

xml.Save(@"C:\xmlout.xml");
Run Code Online (Sandbox Code Playgroud)

输入:

A;B;C
D;E;F
G;H
Run Code Online (Sandbox Code Playgroud)

输出:

<TopElement>
  <Item>
    <Column0>A</Column0>
    <Column1>B</Column1>
    <Column2>C</Column2>
  </Item>
  <Item>
    <Column0>D</Column0>
    <Column1>E</Column1>
    <Column2>F</Column2>
  </Item>
  <Item>
    <Column0>G</Column0>
    <Column1>H</Column1>
  </Item>
</TopElement>
Run Code Online (Sandbox Code Playgroud)

  • 稍晚回复,但如果您的列可以在引用列中包含分隔符,请注意字符串.split()不会注意引用的字符串.示例:var x ="\"Quoted; string \""; var words = x.Split(';'); 字[0]; //"引用的单词[1]; //"字符串"因此,如果您的分隔符是一个公共字符,您将有额外的数据列. (2认同)

Vla*_*lax 10

如果您想使用标题作为元素名称:

var lines = File.ReadAllLines(@"C:\text.csv");
string[] headers = lines[0].Split(',').Select(x => x.Trim('\"')).ToArray();

var xml = new XElement("TopElement",
   lines.Where((line, index) => index > 0).Select(line => new XElement("Item",
      line.Split(',').Select((column, index) => new XElement(headers[index], column)))));

xml.Save(@"C:\xmlout.xml");
Run Code Online (Sandbox Code Playgroud)