@wmfs/xml2csv
v1.35.0
Published
Convert XML file to CSV file
Downloads
976
Readme
xml2csv
Takes an XML file and transforms it into a CSV file, based on format of the map you provide with options.
Install
$ npm install @wmfs/xml2csv --save
Usage
Use with callback
const xml2csv = 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!
}
)
Use with Promises
const xml2csv = 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);
Use with async/await
const xml2csv = require('@wmfs/xml2csv')
try {
const res = await 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']
]
},
)
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",,
xml2csv(options
, callback
)
Options
| 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
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
Testing
$ npm test