Как мне добавить счетчик элементов при создании XML-документа - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь сгенерировать документ XML из CSV. Как мне пойти о вставке номера элемента в XML. Например: если CSV-файл содержит 10 сообщений, каждое сообщение получит номер, указывающий его последовательность в CSV-файле. Я предполагаю, что есть какой-то способ ссылаться на индекс переменной диапазона, но не уверен, как это сделать, используя LINQ или другие средства. Спасибо!

        LoadCSV();
        if (_loadedCSV == null)
            return;

        XElement xmlFile = new XElement("Root",
            from str in _loadedCSV
            let fields = str.Split(',')
            select new XElement("Track",
                new XAttribute("Message Number", <<ELEMENT NUMBER>>),
                new XElement("Date", fields[0]),
                new XElement("Time", fields[1]),
                new XElement("Message", fields[2])));

Ответы [ 2 ]

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

Попробуйте следующее:

           XElement xmlFile = new XElement("Root",
             _loadedCSV.Select((x,i) => new XElement("Track", new object[] {
                new XAttribute("Message Number", i + 1),
                x.Split(new char[] {','})
                .Select((y, j) => (j == 0) ? new XElement("Date", y) :
                                      (j == 1) ? new XElement("Time", y) :
                                      new XElement("Message", y)
                )})));
0 голосов
/ 17 октября 2019

Вы можете использовать Select перегрузку с элементом и индексом, ссылка . К сожалению, он доступен только в синтаксисе метода LINQ, но не в LINQ Query one:

    LoadCSV();
    if (_loadedCSV == null)
        return;

    XElement xmlFile = new XElement("Root",
        (from str in _loadedCSV
        select str.Split(','))
        // .Where(fields => fields.Length >= 3) 
        .Select((fields,index) => new XElement("Track",
            new XAttribute("Message Number", (index+1).ToString()),
            new XElement("Date", fields.Length > 0 ? fields[0] : ""),
            new XElement("Time", fields.Length > 1 ? fields[1] : ""),
            new XElement("Message", fields.Length > 2 ? fields[2] : ""))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...