как обрезать пробелы в заголовках при преобразовании csv в xml

В настоящее время я использую этот код.

private void btnTurnXml_Click(object sender, EventArgs e)
    {
        var lines = File.ReadAllLines(@"C:\StockFile\stocklist.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)))));

        // Saves to same location as the csv as xml
        xml.Save(@"C:\StockFile\CsvXmlout.xml");
    }

и я получаю необработанное исключение типа

'System.Xml.XmlException' произошло в System.Xml.dll

Дополнительная информация: символ '' с шестнадцатеричным значением 0x20 не может быть включен в имя.

Я думаю, это из-за пробелов в заголовках CSV, например, Monkey Soup. но я не могу его обрезать, возможно, я делаю что-то не так, было бы здорово, если бы вы могли указать мне в правильном направлении.


person kylebuddy    schedule 02.05.2016    source источник


Ответы (1)


По умолчанию .Trim() удаляет все начальный и конечный пробелы в строке. Однако .Trim(params char[] c) удалит из строки только начальные и конечные символы, содержащиеся в c.

В вашем использовании кажется, что только символ " (код ASCII 34) будет удален из каждого из заголовков, оставляя все начальные и конечные пробелы. Добавление пробелов и табуляции в список символов обрезки решит проблему с пробелами:

x.Trim('\"', ' ', '\t')

Кроме того, важно отметить, что символы пробела не допускаются в именах тегов XML вообще. Поэтому, вероятно, в ваших интересах просто удалить все пробелы из каждого заголовка:

// Feel free to use a Regex or something if
// you think it produces cleaner code.
x.Trim('\"').Replace(" ", "").Replace("\t", "");
person AtinSkrita    schedule 02.05.2016