我的代碼將一個庫存xml檔案轉換為csv檔案。它按計劃作業。現在我想添加標題,問題是,當我在代碼中添加標題時,專案串列消失了。
我想要的輸出是,添加總共6個標題,最后,為每個標題添加相應的值。下面的圖片展示了預期的輸出應該是什么。
在我添加了,字串csvHeader之后,頭被創建了,但是相應的值沒有顯示。如下圖所示。
using System;
using System.Collections;
using System.Collections.Generic;
使用System.Linq.Options; 使用System.Linq.Options
使用System.Text。
使用System.Threading.Tasks;
使用System.Xml.Tasks; 使用System.Xml.Tasks; 使用System.Xml.Tasks
using System.Xml.Linq;
namespace myApp{
class WriteToCSVFile{
static void Main(String[] args) {
//span>打開檔案并重命名。
//string name;。
string xml = File.ReadAllText("C:artact_inventory.xml"/span>)。
XDocument Xdoc = XDocument.Parse(xml)。
string csvHeader = "Application/Fitment" " 。 " "Part #" "," "專案描述"
"," "供應商" " 。 " "QOH" "," "測量單位";
XElement xeQBXML = Xdoc.Element("QBXML"/span>)。
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 = ""/span>;
//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"/span>).ToList()。
for (int colData = 0; colData < xeColData.Count; colData )
{
XElement partAttributes = xeColData.ElementAt(colData);
string colID = partAttributes.Attribute("colID"/span>).Value。
string value = partAttributes.Attribute("value") .Value。
csvRow = value ","。
}
//添加cr; }
//File.WriteAllText("C:artact_inventory.csv",);
csvRows.Add(csvRow)。
}
}
File.WriteAllText("C:artact_inventoy1.csv",string.Join("
",csvHeader,"
",csvRows))。
}
}
}
uj5u.com熱心網友回復:
代替:
string.Join("
",csvHeader,"
",csvRows)
嘗試:
string.Join("
"/span>,csvHeader, string.Join("
"/span>,csvRows.ToArray()))
uj5u.com熱心網友回復:
我建議做幾個改動。 首先,不要在寫檔案時添加頭,而是在添加資料的回圈之前將其添加到csvRows串列中:
csvRows.Add(csvHeader)。
其次,我不會使用File.WriteAllText和Join,而是使用File.WriteAllLines,這可以讓你跳過Join。
File.WriteAllText("C:artact_inventory1.csv", csvRows) 。
至少在我的測驗中,它能達到你想要的效果。 還有一個不錯的庫(ChoETL),它可以處理寫CSV檔案以及資料轉換等,可能值得一看。
uj5u.com熱心網友回復:
我們建議在所有有換行或回車操作的地方使用字串生成器。例如,我們可以使用換行符號來代替Join(" "),我們可以做以下事情
var sb = new StringBuilder()。
sb.AppendLine(csvHeader)。
foreach (var csvRow in csvRows)
{
sb.AppendLine(csvRow)。
}
File.WriteAllText("bartact_inventoy1.csv", sb.ToString()) 。
這里有一個問題,sb.AppendLine將產生適當的輸出,不僅有新行符號,而且還有回車(CR)
PS: 在你的例子中,你似乎也漏掉了
string colID = partAttributes.Attribute("colID"/span>).Value
將被添加到輸出中
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/306661.html
標籤:
下一篇:在PHP中顯示一個嵌套的會話變數
