将 csv 转换为 xml 时如何 trim 来自 headers 的空格

how to trim the whitespace from headers when converting csv to 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' occurred in System.Xml.dll

Additional information: The ' ' character, hexadecimal value 0x20, cannot be included in a name."

我认为这是因为 CSV headers 例如 Monkey Soup 中的空格。但我似乎无法 trim 如果你能指出正确的方向,也许我做错了什么。

默认情况下,.Trim() 将删除字符串中的所有前导和尾随空格。但是,.Trim(params char[] c) 只会从字符串中删除 c 中包含的前导和尾随字符。

在您的用法中,似乎只有字符 "(ASCII 代码 34)会从每个 header 中 trimmed,留下所有前导和尾随空格。在 trim 个字符列表中添加空格和制表符可以解决空白问题:

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

另外,重要的是要注意 XML 标签名称 根本 中不允许使用空白字符。因此,简单地从每个 header:

中删除所有空格可能符合您的最佳利益
// Feel free to use a Regex or something if
// you think it produces cleaner code.
x.Trim('\"').Replace(" ", "").Replace("\t", "");