【发布时间】:2021-09-15 19:28:07
【问题描述】:
我的代码将库存 xml 文件转换为 csv 文件。它按预期工作。现在我想添加标题,问题是,当我将标题添加到我的代码中时,项目列表消失了。 所需的输出是,总共添加 6 个标头,最后,将相应的值添加到每个标头。下图展示了预期的输出应该是什么。
添加字符串 csvHeader 后,会创建标题,但未显示相应的值。如下所示。
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace myApp{
class WriteToCSVFile{
static void Main(String[] args){
// Open file and rename it.
//string name;
string xml = File.ReadAllText("C:\\bartact_inventory.xml");
XDocument Xdoc = XDocument.Parse(xml);
string csvHeader = "Application/Fitment" + "," + "Part #" + "," + "Item Description" +
"," + "Vendor" + "," + "QOH" + "," + "Unit Of Measure";
XElement xeQBXML = Xdoc.Element("QBXML");
XElement xeQBXMLMsgsRs = xeQBXML.Element("QBXMLMsgsRs");
XElement XDEGeneralSummaryReportQueryRs =
xeQBXMLMsgsRs.Element("GeneralSummaryReportQueryRs");
XElement xeReportRet = XDEGeneralSummaryReportQueryRs.Element("ReportRet");
XElement xeReportData = xeReportRet.Element("ReportData");
List<XElement> xeDataRows = xeReportData.Elements("DataRow").ToList();
List<string> csvRows = new List<string>();
for (int rowdata = 0; rowdata < xeDataRows.Count; rowdata++)
{
string csvRow = "";
//string csvHeader = "";
XElement xeData = xeDataRows[rowdata];
XElement RowData = xeData.Elements("RowData").ToList().ElementAt(0);
//Returns Values from RowData which includes year or category and item part number
string[] partIDs = RowData.Attribute("value").Value.Split(":");
if(partIDs.Length == 2)
{
csvRow = partIDs[0] + "," + partIDs[1] + ",";
//Returns all ColData
List<XElement> xeColData = xeData.Elements("ColData").ToList();
for (int colData = 0; colData < xeColData.Count; colData++)
{
XElement partAttributes = xeColData.ElementAt(colData);
string colID = partAttributes.Attribute("colID").Value;
string value = partAttributes.Attribute("value").Value;
csvRow += value + ",";
}
// add cr
//File.WriteAllText("C:\\bartact_inventory.csv",);
csvRows.Add(csvRow);
}
}
File.WriteAllText("C:\\bartact_inventoy1.csv",string.Join("\n",csvHeader,"\n",csvRows));
}
}
}
【问题讨论】:
-
省点麻烦,使用一个旨在让读取和写入 CSV 文件变得容易的库。
-
我同意@Xerillio,如果逗号进入描述或任何其他列,此实现将被破坏。
-
同意@Xerillio。我一直用FileHelpers library,但你可以找到其他几个。