Используйте цикл for в XElement - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь создать конвертер CSV в XML. XML-файлы могут не всегда иметь одинаковое количество полей, поэтому я пытаюсь получить это число, а затем использовать его для создания элементов

string[] source = new string[] { ligne };  
                    XElement element = new XElement("DOCUMENT",
                        new XElement("GED",
                            from li in source  
                            let champs = ligne.Split(';')
                            select new XElement("INDEX",
                           // where i'd like to put the loop code
                            new XElement(col[0], champs[0]),
                            new XElement(col[1], champs[1]),
                            new XElement(col[2], champs[2])... //etc,
                            )
                        )
                    );
//the code i'd like to put in the previous code
for (int i = 0; i < col.Length +1; i ++)
{
     new XElement(col[i], champs[i]); 
},

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Вы можете попробовать следующий код, чтобы преобразовать CSV-файл в нужный XML-файл.

var lines = File.ReadAllLines(@"D:\t\Book1.csv");

string[] headers = lines[0].Split(',').Select(x => x.Trim('\"')).ToArray();

var xml = new XElement("TopElement",
          lines.Where((line, index) => index > 0).Select(line => new XElement("Item",
          line.Split(',').Select((column, index) => new XElement(headers[index], column)))));

xml.Save(@"d:\xmlout.xml");

CSV-файл:

enter image description here

XML-файл:

enter image description here

0 голосов
/ 31 октября 2019

Вместо использования цикла вы можете просто использовать Linq:

  XElement element = new XElement("DOCUMENT",
    new XElement("GED",
      from li in source
      let champs = ligne.Split(';')
      select new XElement("INDEX", champs.Select(c => new XElement(c, c)))
    )
  );
...