目前我正在使用此代码。
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。但我似乎无法削减它,如果你能指出我正确的方向,也许我做错了会很好。
答案 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", "");