C# Код для генерации XML Древовидная структура из файла CSV - PullRequest
0 голосов
/ 01 февраля 2020

Привет, мой входной CSV похож на CSV

JournalBatchNumber,VOUCHER,LINENUM,ACCOUNTDISPLAYVALUE,ACCOUNTTYPE,BANKTransactionType
CU000HGMESEBT8,Joe,1,Sleuth IT,1,payment
CU000HGMESEBT9,NRT,2,Messy IT,2,Paymwent
CU000HGMESEBT4,NRT,3,Messy IT,2,Paymwent

Выход

<?xml version="1.0" encoding="utf-8" ?>
<Document>
  <CUSTOMERPAYMENTJOURNALHEADERENTITY>
    <JOURNALBATCHNUMBER></JOURNALBATCHNUMBER>
    <DESCRIPTION>Sundry Debtor Receipts</DESCRIPTION>
    <JOURNALNAME>CUSTPAY</JOURNALNAME>
    <CUSTOMERPAYMENTJOURNALLINEENTITY>
      <JOURNALBATCHNUMBER></JOURNALBATCHNUMBER>
      <LINENUMBER></LINENUMBER>
      <ACCOUNTDISPLAYVALUE>GCU000284</ACCOUNTDISPLAYVALUE>
      <ACCOUNTTYPE>1</ACCOUNTTYPE>
      <BANKTRANSACTIONTYPE />
      <VOUCHER>GBX001</VOUCHER>
    </CUSTOMERPAYMENTJOURNALLINEENTITY>
  </CUSTOMERPAYMENTJOURNALHEADERENTITY>
</Document>

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Попробуйте использовать Xml Linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.csv";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(FILENAME);
            string ident = "<?xml version=\"1.0\"?><Document></Document>";

            XDocument doc = XDocument.Parse(ident);
            XElement root = doc.Root;

            XElement header = new XElement("CUSTOMERPAYMENTJOURNALHEADERENTITY", new object[] {
                new XElement("JOURNALBATCHNUMBER"),
                new XElement("DESCRIPTION", "Sundry Debtor Receipts"),
                new XElement("JOURNALNAME", "CUSTPAY")
            });
            root.Add(header);

            int lineNumber = 0;
            string line = "";
            string[] columnNames = null;
            while ((line = reader.ReadLine()) != null)
            {
                line = line.Trim();
                if (line.Length > 0)
                {
                    lineNumber++;
                    string[] splitArray = line.Split(new char[] { ',' }).ToArray();
                    if (lineNumber == 1)
                    {
                        columnNames = splitArray;
                    }
                    else
                    {
                        XElement entity = new XElement("CUSTOMERPAYMENTJOURNALLINEENTITY");
                        header.Add(entity);

                        for (int i = 0; i < columnNames.Length; i++)
                        {
                            XElement newElement = new XElement(columnNames[i].Trim(), splitArray[i].Trim());
                            entity.Add(newElement);
                        }
                    }
                }
            }

        }
    }
}
0 голосов
/ 01 февраля 2020

Вот пример кода c#, который генерирует XML CSV-файл ..

using System.Xml;

namespace ConsoleApp1
{
   class Program
   {
       public static string[][] ReadCsvDataFromFile()
       {
           //sample, just first row for CSV-data 
           var fakeCSVData = new List<string[]>();
           fakeCSVData.Add(new string[] { "CU00000HGMESEBT8", "Joe", "1", "Sleuth IT", "1", "payment" });
           return fakeCSVData.ToArray();
       }

       static void Main(string[] args)
       {
           var csvData = ReadCsvDataFromFile();
           var doc = new System.Xml.XmlDocument();

           for (var i = 0; i < csvData.Length; i++)
           {
               var csvRowAsArray = csvData[i];

               var recordHeader = doc.CreateElement("CUSTOMERPAYMENTJOURNALHEADERENTITY");

               var jbatchnumTag = doc.CreateNode(XmlNodeType.Element, "JOURNALBATCHNUMBER", "");
               jbatchnumTag.InnerText = csvRowAsArray[0];
               recordHeader.AppendChild(jbatchnumTag);

               var descTag = doc.CreateNode(XmlNodeType.Element, "DESCRIPTION", "");
               //descTag.InnerText = ??
               recordHeader.AppendChild(descTag);

               var jnameTag = doc.CreateNode(XmlNodeType.Element, "JOURNALNAME", "");
               //jnameTag.InnerText = ???
               recordHeader.AppendChild(jnameTag);

               var customerRecord = doc.CreateElement("CUSTOMERPAYMENTJOURNALENTITY");

               var jbatchnumTag2 = doc.CreateNode(XmlNodeType.Element, "JOURNALBATCHNUMBER", "");
               jbatchnumTag2.InnerText = csvRowAsArray[0];
               customerRecord.AppendChild(jbatchnumTag2);

               var lineNumTag = doc.CreateNode(XmlNodeType.Element, "LINENUMBER", "");
               lineNumTag.InnerText = csvRowAsArray[2];
               customerRecord.AppendChild(lineNumTag);

               var accountDisplayTag = doc.CreateNode(XmlNodeType.Element, "ACCOUNTDISPLAYVALUE", "");
               accountDisplayTag.InnerText = csvRowAsArray[3];
               customerRecord.AppendChild(accountDisplayTag);

               var accountTypeTag = doc.CreateNode(XmlNodeType.Element, "ACCOUNTTYPE", "");
               accountTypeTag.InnerText = csvRowAsArray[3];
               customerRecord.AppendChild(accountDisplayTag);

               var bankTransactionTypeTag = doc.CreateNode(XmlNodeType.Element, "BANKTRANSACTIONTYPE", "");
               bankTransactionTypeTag.InnerText = csvRowAsArray[5];
               customerRecord.AppendChild(bankTransactionTypeTag);

               var voucherTag = doc.CreateNode(XmlNodeType.Element, "VOUCHER", "");
               voucherTag.InnerText = csvRowAsArray[1];
               customerRecord.AppendChild(voucherTag);

               recordHeader.AppendChild(customerRecord);
               doc.AppendChild(recordHeader);
           }

           doc.Save(@"test.xml");
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...