Takes an XML file and transforms it into a CSV file, based on format of the map you provide with options.
$ npm install @wmfs/xml2csv --saveconstxml2csv=require('@wmfs/xml2csv')xml2csv({xmlPath: 'path/to/file.xml',csvPath: 'path/to/file.csv',rootXMLElement: 'Person',headerMap: [['Name','name','string'],['Age','age','integer'],['Gender','gender','string'],['Brother','brother','string','Siblings'],['Sister','sister','string','Siblings']]},function(err,info){console.log(err,info)// Done!})constxml2csv=require('@wmfs/xml2csv')xml2csv({xmlPath: 'path/to/file.xml',csvPath: 'path/to/file.csv',rootXMLElement: 'Person',headerMap: [['Name','name','string'],['Age','age','integer'],['Gender','gender','string'],['Brother','brother','string','Siblings'],['Sister','sister','string','Siblings']]},).then(console.log).catch(console.log);constxml2csv=require('@wmfs/xml2csv')try{constres=awaitxml2csv({xmlPath: 'path/to/file.xml',csvPath: 'path/to/file.csv',rootXMLElement: 'Person',headerMap: [['Name','name','string'],['Age','age','integer'],['Gender','gender','string'],['Brother','brother','string','Siblings'],['Sister','sister','string','Siblings']]},)console.log(res)}catch(err){console.log(err)}Input:
<People>
<Person>
<Name>Maggie</Name>
<Age>3</Age>
<Gender>Female</Gender>
<Siblings>
<Brother>Bart</Brother>
<Sister>Lisa</Sister>
</Siblings>
</Person>
<Person>
<Name>Marge</Name>
<Age>45</Age>
<Gender>Female</Gender>
</Person>
</People>
Output:
name, age, gender, brother, sister
"Maggie",3,"Female","Bart","Lisa"
"Marge",45,"Female",,
| Property | Type | Notes |
|---|---|---|
xmlPath | string | A path to the xml input file. Cannot be provide with xmlStream property. |
xmlStream | fs.ReadStream | A readable stream from an xml file. Cannot be provide with xmlPath property. |
csvPath | string | The path and filename of the generated CSV output file (note that any intermediate folders will be created). Cannot be provide with csvStream property. |
csvStream | fs.WriteStream | A writeable stream for the generated CSV data. Cannot be provide with csvPath property. |
rootXMLElement | string | The XML root tag for each record, element to split records on in XML file. |
headerMap | [array] | See the Header Map section for more details. |
strict | [boolean] | Should the sax parser run in strict mode ? Defaults to true. |
options.headerMap needs to be in the structure of:
[
[xmlTag, csvHeader, type, parent],
[xmlTag, csvHeader, type, parent],
...
]
- xmlTag and csvHeader must be the related fields
- type must be integer, date or string
- parent is optional, must be the parent tag in format of the XML tag
$ npm test