- Rows become repeated elements
- Every data row produces one <row> element inside a <rows> wrapper, with each column as a child element named after its header. Both names can be changed to match the schema you are targeting.
- Column names must be valid XML names
- A header like "first name" or "2024" cannot be an element name, so it is rewritten to first_name and _2024 respectively, and the change is reported. Renaming your CSV headers first gives you control over the result.
- Special characters are escaped
- Ampersands, angle brackets and quotes in cell values are replaced with entity references, so a value containing markup cannot break the document. The output is always well-formed whatever the data contains.
- Everything stays text
- CSV cells are untyped and XML content is text, so no type conversion happens or is needed. Empty cells become empty elements, which cannot be distinguished from a genuinely empty value.