【问题标题】:Converting XML file to CSV using C#使用 C# 将 XML 文件转换为 CSV
【发布时间】:2015-12-07 13:58:59
【问题描述】:

我想使用 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。

【问题讨论】:

  • 我投票结束这个问题作为离题,因为 OP 没有显示出解决问题的重大努力。
  • 这个问题太笼统了。如果您有特定的编码问题,请先进行一些研究并返回。
  • 关于 CSV 的“熟悉”并不多。它是每行文本一条记录,字段用逗号分隔(并且,根据数据,用双引号括起来)。学习一点 XSLT,你很快就会有一个可行的解决方案。
  • 搜索序列化/反序列化
  • 您可以为此目的使用LINQToXML。搜索示例。

标签: c# xml csv


【解决方案1】:

这应该可以帮助您将 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();
}

【讨论】:

    【解决方案2】:

    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
    

    查看 CodeProject 文章以获得更多帮助。

    免责声明:我是这个库的作者。

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2019-12-15
      • 2021-05-08
      • 2021-11-21
      • 2021-04-29
      • 2014-02-20
      相关资源
      最近更新 更多