我需要将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)
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)