2016-05-02 13 views
0

Derzeit verwende ich diesen Code.Wie trimmen Sie den Whitespace von Headern beim Konvertieren von CSV zu 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"); 
    } 

und ich erhalte „eine nicht behandelte Ausnahme des Typs

'System.Xml.XmlException' in System.Xml.dll aufgetreten

Zusätzliche Informationen: Die '' Zeichen, hexadezimal Wert 0x20, kann nicht in einem Namen enthalten sein. "

Ich denke es wegen der Leerzeichen in den CSV-Header zB Monkey Soup. aber ich kann es nicht scheinen, es zu schneiden, vielleicht mache ich etwas falsch wäre toll, wenn Sie mir in die richtige Richtung zeigen könnten.

Antwort

0

Standardmäßig entfernt .Trim() alle führenden und nachgestellten Leerzeichen in einer Zeichenfolge. .Trim(params char[] c) entfernt jedoch nur führende und nachfolgende Zeichen, die in c enthalten sind, aus der Zeichenfolge.

In Ihrer Verwendung scheint nur das Zeichen " (ASCII-Code 34) von jedem der Header abgeschnitten zu werden, wobei alle führenden und nachfolgenden Leerzeichen zurückgelassen werden. Hinzufügen von Leerzeichen und Tabulatoren in der Liste der Trimm Zeichen würde Ihr Leerzeichen Problem lösen:

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

Zusätzlich, ist es wichtig zu beachten, dass Leerzeichen nicht in XML-Tag-Namen erlaubt bei allen. Daher ist es wahrscheinlich in Ihrem Interesse, einfach alle Whitespace aus jeder Kopfzeile zu entfernen:

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