将 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", "");
目前我正在使用这个代码。
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", "");