从多个文件夹中的多个 CSV 创建 XML
Create XML from multiple CSV's in multiple folders
我正在做的重点是我需要从位于一个主文件夹内的多个子文件夹中的多个 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 中,并仅添加到现有的根元素上。
//迈克
我正在做的重点是我需要从位于一个主文件夹内的多个子文件夹中的多个 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 中,并仅添加到现有的根元素上。
//迈克