public static void FetchColumnSeparater(ColumnDelimit delimit, out string separater) { switch (delimit) { case ColumnDelimit.Comma: case ColumnDelimit.Default: separater = ","; break; case ColumnDelimit.Dot: separater = "."; break; case ColumnDelimit.OrSymbol: separater = "|"; break; case ColumnDelimit.Percentage: separater = "%"; break; case ColumnDelimit.TabSpace: separater = "\t"; break; default: separater = ","; break; } }
/// <summary> /// Convert XML to SVC from file table by table /// </summary> /// <param name="xmlfilepath">xml file path</param> /// <param name="csvpath">csv path</param> /// <param name="datatag">Table Name</param> /// <param name="arrange">Element or Attribute</param> /// <param name="rdelimit">Row separater</param> /// <param name="cdelimit">Column separater</param> public static void Convert(string xmlfilepath, string csvpath, string datatag, DataArrange arrange, RowDelimit rdelimit, ColumnDelimit cdelimit) { try { var builder = new StringBuilder(); var doc = XDocument.Load(xmlfilepath); FetchRowSeparater(rdelimit, out var rowSeparater); FetchColumnSeparater(cdelimit, out var columnseparater); foreach (var data in doc.Descendants(datatag)) { if (arrange == DataArrange.Element) { foreach (var xElement in data.Elements()) { builder.Append(xElement.Value); builder.Append(columnseparater); } } else { foreach (var xAttribute in data.Attributes()) { builder.Append(xAttribute.Value); builder.Append(columnseparater); } } // Remove the last Columnseparater builder.Remove(builder.Length - 1, 1); builder.Append(rowSeparater); } File.AppendAllText(csvpath, builder.ToString()); } catch (Exception exception) { throw new Exception("Convert fail", exception); } }
/// <summary> /// Convert XML to SVC By batch /// </summary> /// <param name="dataTable">Staging table</param> /// <param name="arrange"></param> /// <param name="rdelimit">Row separater</param> /// <param name="cdelimit">Column separater</param> public static void Convert(DataTable dataTable, DataArrange arrange, RowDelimit rdelimit, ColumnDelimit cdelimit) { try { // select SchemaLevel from [dbo].[ProductSchemaInfo] var dbLevel = "77"; foreach (DataRow data in dataTable.Rows) { var xmlString = data["row_data"].ToString(); long timeStamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); Convert(xmlString, rdelimit, cdelimit, dbLevel, timeStamp.ToString()); } } catch (Exception exception) { throw new Exception("Convert fail", exception); } }
static void converttocsv(XDocument doc, string outputcsv, string datatag, RowDelimit rdelimit, ColumnDelimit cdelimit, bool outputheader) { StringBuilder builder = new StringBuilder(); string Rowseparater = string.Empty; FetchRowSeparater(rdelimit, out Rowseparater); string Columnseparater = string.Empty; FetchColumnSeparater(cdelimit, out Columnseparater); if (outputheader == true) { foreach (XElement data in doc.Descendants(datatag)) { bool first = true; foreach (XAttribute innerval in data.Attributes()) { if (first == true) { first = false; if (seqence_no == true) { builder.Append("ROW_ID,"); } } else { builder.Append(Columnseparater); } builder.Append(innerval.Name); } builder.Append(Rowseparater); break; } } foreach (XElement data in doc.Descendants(datatag)) { bool first = true; foreach (XAttribute innerval in data.Attributes()) { if (first == true) { first = false; if (seqence_no == true) { builder.Append(row_id); builder.Append(Columnseparater); row_id++; } } else { builder.Append(Columnseparater); } builder.Append(innerval.Value); } builder.Append(Rowseparater); } File.AppendAllText(outputcsv, builder.ToString()); }
static void converttoupx(XDocument doc, string outputcsv, string datatag, RowDelimit rdelimit, ColumnDelimit cdelimit, bool outputheader, ref Upx upx) { StringBuilder builder = new StringBuilder(); string Rowseparater = string.Empty; FetchRowSeparater(rdelimit, out Rowseparater); string Columnseparater = string.Empty; FetchColumnSeparater(cdelimit, out Columnseparater); if (upx.startrectype63 == 0) { foreach (XElement data in doc.Descendants(datatag)) { bool first = true; int i = 0; foreach (XAttribute innerval in data.Attributes()) { if (innerval.Name == "RecTypeCode63") { upx.startrectype63 = i; } if (innerval.Name == "RecTypeCode64") { upx.startrectype64 = i; } if (first == true) { first = false; } i++; } break; } } foreach (XElement data in doc.Descendants(datatag)) { int i = 0; bool first = true; foreach (XAttribute innerval in data.Attributes()) { if (upx.outputrectype60 == false && i < upx.startrectype63) { if (first == true) { builder.Append("***1,13.0.0,20150421,XXXXXXX,OASIS,XXXXXXX,XXXXXX,UPX from LocFile,XXX,TBD,Hurricane,X,ML,USD,"); builder.Append(Rowseparater); first = false; } else { builder.Append(Columnseparater); } builder.Append(innerval.Value); } if (upx.outputrectype60 == false && i == upx.startrectype63) { upx.outputrectype60 = true; builder.Append(Rowseparater); first = true; } if (i >= upx.startrectype63 && i < upx.startrectype64) { if (first == true) { first = false; } else { builder.Append(Columnseparater); } builder.Append(innerval.Value); } if (i == upx.startrectype64) { builder.Append(Rowseparater); first = true; } if (i >= upx.startrectype64) { if (first == true) { first = false; } else { builder.Append(Columnseparater); } builder.Append(innerval.Value); } i++; } builder.Append(Rowseparater); } File.AppendAllText(outputcsv, builder.ToString()); }
/// <summary> /// Convert XML to SVC row by row /// </summary> /// <param name="xmlString">XML with only one node</param> /// <param name="rdelimit">Row separater</param> /// <param name="cdelimit">Column separater</param> /// <param name="dbLevel"></param> /// <param name="timeStamp"></param> private static void Convert(string xmlString, RowDelimit rdelimit, ColumnDelimit cdelimit, string dbLevel, string timeStamp) { try { #region ReadXML var builder = new StringBuilder(); var xDoc = new XmlDocument(); xDoc.LoadXml(xmlString); FetchRowSeparater(rdelimit, out var rowSeparater); FetchColumnSeparater(cdelimit, out var columnSeparater); // Set default Header separater to TabSpace. FetchColumnSeparater(ColumnDelimit.TabSpace, out var headerSeparater); var root = xDoc.FirstChild; string tableName; if (xDoc.DocumentElement != null) { tableName = xDoc.DocumentElement.Name; } else { throw new Exception("Incorrect XML format"); } if (xDoc.FirstChild == null) { return; } var site = xDoc.FirstChild["site_ref"]?.InnerText; #endregion #region Create folder and CSV file var fileFlag = false; const string folderName = @"C:\Development"; var pathString = Path.Combine(folderName, "SubFolder"); Directory.CreateDirectory(pathString); //string fileName = System.IO.Path.GetRandomFileName(); var fileName = tableName + dbLevel + site + timeStamp; pathString = Path.Combine(pathString, fileName); // Check that the file doesn't already exist. If it doesn't exist, create. if (!File.Exists(pathString)) { // Create file. using (File.Create(pathString)) { // First reading Flag. fileFlag = true; } } #endregion #region Write //Display the contents of the child nodes. if (root != null && root.HasChildNodes) { // Write node name at first reading. if (fileFlag) { for (int i = 0; i < root.ChildNodes.Count; i++) { builder.Append(root.ChildNodes[i]?.Name); builder.Append(headerSeparater); } builder.Remove(builder.Length - 1, 1); builder.Append(rowSeparater); } for (int i = 0; i < root.ChildNodes.Count; i++) { builder.Append(root.ChildNodes[i]?.InnerText); builder.Append(columnSeparater); } builder.Remove(builder.Length - 1, 1); builder.Append(rowSeparater); } File.AppendAllText(pathString, builder.ToString()); #endregion } catch (Exception exception) { throw new Exception("Convert fail", exception); } }