使用 C# 在 XML 文件中转换 CSV

Posted

技术标签:

【中文标题】使用 C# 在 XML 文件中转换 CSV【英文标题】:Convert CSV in XML file with C# 【发布时间】:2021-12-02 00:15:18 【问题描述】:

我编写了这段代码,它允许我读取 CSV 文件并将其转换为 XML 文件。 我有一个问题,如果在 CSV 文件中有分号 (;) 程序无法读取数据,如果有逗号 (,) 分隔程序可以读取数据的单词并将它们正确插入 XML 文件. 你能找到用逗号 (,) 替换分号 (;) 的方法吗? 非常感谢!! :)

这是代码:

        writer.WriteStartDocument();
        writer.WriteStartElement("DC8_Recipes");

        using (CsvReader reader = new CsvReader(path))
        
            reader.ReadHeaders();

            while (reader.ReadRecord())
            
                writer.WriteStartElement("DC8_Recipes");

                writer.WriteAttributeString("PlantNo", reader["id_imp"]);
                writer.WriteAttributeString("No", reader["nome_frm"]);
                writer.WriteAttributeString("Name", reader["desc_frm"]);

                writer.WriteEndElement();
            
            reader.Close();
        

        writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Close();


        logText.Text += DateTime.Now + " Convertion Completed\n";
        logText.Text += DateTime.Now + " Saving file to: " + savepath + "\n";
        try
        
            logText.Text += DateTime.Now + " File save completed!\n";
            logText.Text += DateTime.Now + " process END\n";
        
        catch
        

        
    

【问题讨论】:

请将代码作为文本直接发布到您的问题中,而不是作为图像。 另外,我相信 CsvHelper 有办法设置分隔符。这应该比更改您的输入更可取。不过我可能是错的。 您没有发布CsvReader 的代码,但它应该支持不同的文化,因此您可以使用CultureInfo 对其进行初始化。然后您可以通过CultureInfo.TextInfo.ListSeparator 属性选择正确的分隔符。当当前文化表示使用逗号作为小数分隔符的语言时,这也是 Excel 生成以分号分隔的 CSV 文件的方式。 我找到了一个更改 CsvHelper 分隔符的主题。希望对您有所帮助:***.com/questions/30437440/… 编写您自己的使用字符串拆分的 CSVReader,而不是无法运行的 3rd 方应用程序。它只有几行代码。 【参考方案1】:

您可以将CsvConfiguration 传递给CsvReader 构造函数以更改默认分隔符(which is based on the current CultureInfo):

区域性用于确定类型转换时的默认分隔符、默认行尾和格式。

using (var csv = new CsvReader(writer, new CsvConfiguration(CultureInfo.InvariantCulture) 
 
    Delimiter = "," 
))

    csv.Read();

【讨论】:

【参考方案2】:

你可以自己写CsvReader:

    public static List<Model> ReadCsv(string path)
    
        var modelList = new List<Model>();
        using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
        
            using (var streamReader = new StreamReader(fileStream, Encoding.Default))
            
                while (!streamReader.EndOfStream)
                
                    var line = streamReader.ReadLine();

                    if (string.IsNullOrEmpty(line))
                    
                        continue;
                    

                    var splittedLine = line.Split(';');

                    var model = new Model();

                    for (var i = 0; i < splittedLine.Length; i++)
                    
                        switch (i)
                        
                            case 0:
                                model.FirstColumn = splittedLine[i];
                                break;
                            case 1:
                                model.SecondColumn = splittedLine[i];
                                break;
                            case 2:
                                model.ThirdColumn = Convert.ToInt32(splittedLine[i]);
                                break;
                        
                    

                    modelList.Add(model);
                
            
        

        return modelList;
    

【讨论】:

以上是关于使用 C# 在 XML 文件中转换 CSV的主要内容,如果未能解决你的问题,请参考以下文章

我正在使用 C# 将 XML 文件转换为 CSV。我尝试了不同的方法,但无法弄清楚如何访问键名/值对

在python中使用argparse将csv转换为xml

使用 XML 从 XML 转换为 CSV 时 CSV 文件中的标题

使用 C# 将 csv 文件转换为 json

将 CSV 文件转换为 XML

如何用C#将Excel转换成XML文件,希望把一些关键的地方讲得详细些,能让我明白就给分