将csv转换为xml

时间:2016-05-02 06:13:22

标签: c# xml csv removing-whitespace

目前我正在使用此代码。

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.dll

中发生'System.Xml.XmlException'      

附加信息:''字符,十六进制值0x20,不能包含在名称中。“

我认为是因为CSV标题中的空格,例如Monkey Soup。但我似乎无法削减它,如果你能指出我正确的方向,也许我做错了会很好。

1 个答案:

答案 0 :(得分:0)

默认情况下,.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", "");