使用C#将XML文件转换为CSV

时间:2015-12-07 13:58:59

标签: c# xml csv

我想使用C#将XML文件转换为CSV文件。

            <?xml version="1.0"?>
            <results>
                <results>
                        <field>2</field>
                        <something>0</something>
                        <name>alex</name>
                </results>
                <results>
                        <field>0</field>
                        <something>0</something>
                        <name>jack</name>
                </results>
                <results>
                        <field>2</field>
                        <something>1</something>
                        <name>heath</name>
                </results>
                <results>
                        <field>0</field>
                        <something>0</something>
                        <name>blake</name>
                </results>
            </results>

上面的XML是我的文件结构的一个示例,实际文件实际上要大得多。我有多个XML文件,字段名称随每个XML文件而变化。因此,我需要自动获取字段名称及其值,并将其全部存储到CSV文件中。任何帮助都会受到赞赏,因为我不熟悉CSV。

2 个答案:

答案 0 :(得分:0)

这可以帮助您将xml格式转换为csv格式,但您需要从here下载csv阅读器

using (CsvWriter writer = new CsvWriter("users.csv"))
using (XmlRecordReader reader = new XmlRecordReader("users.xml", "users/user"))
{
reader.Columns.Add("field", "field");
reader.Columns.Add("something", "something");
reader.Columns.Add("name", "name");

writer.Write("field");
writer.Write("something");
writer.Write("name");
writer.EndRecord();

while (reader.ReadRecord())
{
    writer.Write(reader["field"]);
    writer.Write(reader["something"]);
    writer.Write(reader["name"]);
    writer.EndRecord();
}
reader.Close();
writer.Close();
}

答案 1 :(得分:0)

Cinchoo ETL - 一个开源库简化了将任何Xml转换为CSV文件的过程,只需很少的设置。

使用下面的代码可以生成Xml

string xml = @"<?xml version=""1.0""?>
<results>
    <results>
            <field>2</field>
            <something>0</something>
            <name>alex</name>
    </results>
    <results>
            <field>0</field>
            <something>0</something>
            <name>jack</name>
    </results>
    <results>
            <field>2</field>
            <something>1</something>
            <name>heath</name>
    </results>
    <results>
            <field>0</field>
            <something>0</something>
            <name>blake</name>
    </results>
</results>";

StringBuilder sb = new StringBuilder();
using (var p = ChoXmlReader.LoadText(xml))
{
    using (var w = new ChoCSVWriter(sb)
        .WithFirstLineHeader()
        )
        w.Write(p);
}

Console.WriteLine(sb.ToString());

输出CSV:

field,something,name
2,0,alex
0,0,jack
2,1,heath
0,0,blake

Checkout CodeProject文章提供了一些额外的帮助。

免责声明:我是这个图书馆的作者。