Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个文件夹中的多个CSV创建XML_C#_Xml_Csv_Xelement - Fatal编程技术网

C# 从多个文件夹中的多个CSV创建XML

C# 从多个文件夹中的多个CSV创建XML,c#,xml,csv,xelement,C#,Xml,Csv,Xelement,我所做的全部工作就是需要从一个主文件夹中多个子文件夹中的多个CSV文件创建主XML 这就是我现在正在使用的,但它似乎只覆盖并创建了最后一个CSV的xml String AudioDir = @"C:\XMLFILES"; DirectoryInfo AudiodirInfo = new DirectoryInfo(AudioDir); if (AudiodirInfo.Exists == false) { Directory

我所做的全部工作就是需要从一个主文件夹中多个子文件夹中的多个CSV文件创建主XML

这就是我现在正在使用的,但它似乎只覆盖并创建了最后一个CSV的xml

String AudioDir = @"C:\XMLFILES";
        DirectoryInfo AudiodirInfo = new DirectoryInfo(AudioDir);
        if (AudiodirInfo.Exists == false)
        {
            Directory.CreateDirectory(AudioDir);
        }

        List<String> AudioXMLFiles = Directory.GetFiles(@"C:\LOGGER AUDIO", "*.csv*", SearchOption.AllDirectories).ToList();
        XElement audxml = null;
        foreach (string file in AudioXMLFiles)
        {
            string[] lines2 = File.ReadAllLines(file);
           audxml = new XElement("root",
           from str in lines2
           let columns = str.Split(',')
           select new XElement("recording_info",
                   new XElement("recorded_accound_id", columns[1]),
                   new XElement("date_created_ts", String.Format("{0:####-##-##  ##:##:##}", Convert.ToInt64(columns[2] + columns[3]))),                                    
                   new XElement("recorded_cid", columns[9]),//1
                   new XElement("recording_tag", columns[1]),
                   new XElement("filename", columns[1] + "_" + columns[2] + "_" + columns[3]),
                   new XElement("record", columns[3]),//Record in TimeoutException format
                   new XElement("from_caller_id", columns[10] + "  <" + columns[8] + ">")



               ));


        }
        audxml.Save(@"C:\XMLFile.xml");

在foreach的每次迭代中都会覆盖audxml。您可能希望在循环外创建一个根节点,然后将每个文件的xml输出添加到该根节点

XElement audxml = new XElement("root");

foreach (string file in AudioXMLFiles)
    {
        string[] lines2 = File.ReadAllLines(file);
       XElement filexml = new XElement("root",
       from str in lines2
       let columns = str.Split(',')
       select new XElement("recording_info",
               new XElement("recorded_accound_id", columns[1]),
               new XElement("date_created_ts", String.Format("{0:####-##-##  ##:##:##}", Convert.ToInt64(columns[2] + columns[3]))),                                    
               new XElement("recorded_cid", columns[9]),//1
               new XElement("recording_tag", columns[1]),
               new XElement("filename", columns[1] + "_" + columns[2] + "_" + columns[3]),
               new XElement("record", columns[3]),//Record in TimeoutException format
               new XElement("from_caller_id", columns[10] + "  <" + columns[8] + ">")
           ));

           audXml.Add(fileXml);
    }
    audxml.Save(@"C:\XMLFile.xml");

问题在于,在foreach循环的每次迭代中,您都在重新创建文档

相反,您应该在循环之前创建根文档。然后将元素添加到循环内的根中

例如:

XElement audxml = new XElement("root");
foreach(...)
{
  //..
  audxml.Add(new XElement("blabla"));
}
这将在每次迭代中将数据保留在XElement中,只需添加到现有的根元素上

//迈克