Summary

Transforms a CSV (Comma-Separated Values) file into an XML document.

Code (C#)

// Clear the output editor
Output.Clear();

// Create XML document
XmlDocument xmlDoc = new XmlDocument();

// Add XML declaration tag: <?xml>
XmlDeclaration xmlNode = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmlDoc.AppendChild(xmlNode);

// Add root node: <CsvToXml>...</CsvToXml>
XmlElement csvNode = xmlDoc.CreateElement("CsvToXml");
xmlDoc.AppendChild(csvNode);

// Generate column names for use in the XML document
string[] columnNames = new string[Input.Columns.Count];
for (int colIndex = 0; colIndex < Input.Columns.Count; colIndex++)
{
    // If available, use the given column title
    columnNames[colIndex] = (Input.HeaderRow != null ? Input.HeaderRow[colIndex] : "");
    // If no column title is given, generate a new one
    if (columnNames[colIndex] == "")
        columnNames[colIndex] = "Field" + colIndex.ToString();
    // Make sure that the column name is a valid XML name
    columnNames[colIndex] = XmlConvert.EncodeName(columnNames[colIndex]);
}

// Add node for every row in the CSV document
foreach(ICsvRow row in Input.BodyRows)
{
    // <Row>...</Row>
    XmlElement rowNode = xmlDoc.CreateElement("Row");
    csvNode.AppendChild(rowNode);
    
    // Add sub node for each available cell in the row
    for (int colIndex = 0; colIndex < row.Cells.Count; colIndex++)
    {
        // <ColumnName>...</ColumnName>
        XmlElement cellNode = xmlDoc.CreateElement(columnNames[colIndex]);
        cellNode.AppendChild(xmlDoc.CreateTextNode(row[colIndex]));
        rowNode.AppendChild(cellNode);
    }
}

// Write XML content to StringWriter
using (StringWriter stringWriter = new StringWriter())
using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter))
{
    xmlTextWriter.Formatting = Formatting.Indented;  // Output formatted XML code
    xmlDoc.WriteTo(xmlTextWriter);
    
    // Output XML code
    Output.Text = stringWriter.ToString();
} 
Input Type: CSV, Output Type: Plain Text

Download Project File

File: Convert_CSV_to_XML.dvp (15.47 KB)

To open this file, DataVoila must be installed on your computer. If this is not yet the case, please click here to download the free demo version.