Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wmfs/xml-flatten2csv
https://github.com/wmfs/xml-flatten2csv
package tymly
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/wmfs/xml-flatten2csv
- Owner: wmfs
- License: mit
- Created: 2018-06-11T15:53:33.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-09-13T19:32:16.000Z (5 months ago)
- Last Synced: 2024-09-14T10:29:05.289Z (4 months ago)
- Topics: package, tymly
- Language: JavaScript
- Size: 338 KB
- Stars: 0
- Watchers: 8
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# xml-flatten2csv
[![Tymly Package](https://img.shields.io/badge/tymly-package-blue.svg)](https://tymly.io/)
[![npm (scoped)](https://img.shields.io/npm/v/@wmfs/xml-flatten2csv.svg)](https://www.npmjs.com/package/@wmfs/xml-flatten2csv)
[![CircleCI](https://circleci.com/gh/wmfs/xml-flatten2csv.svg?style=svg)](https://circleci.com/gh/wmfs/xml-flatten2csv)
[![codecov](https://codecov.io/gh/wmfs/xml-flatten2csv/branch/master/graph/badge.svg)](https://codecov.io/gh/wmfs/xml-flatten2csv)
[![CodeFactor](https://www.codefactor.io/repository/github/wmfs/xml-flatten2csv/badge)](https://www.codefactor.io/repository/github/wmfs/xml-flatten2csv)
[![Dependabot badge](https://img.shields.io/badge/Dependabot-active-brightgreen.svg)](https://dependabot.com/)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/wmfs/tymly/blob/master/packages/pg-concat/LICENSE)> Takes an XML file and transforms it into a CSV file, based on a mapping you provide.
> One XML element and its contents can be transformed into multiple CSV output lines.## Install
```bash
$ npm install xml-flatten2csv --save
``````javascript
const xmlFlatten2csv = require('xml-flatten2csv')xmlFlatten2csv(
{
xmlPath: 'path/to/file.xml',
csvPath: 'path/to/file.csv',
rootXMLElement: 'Episode',
pivotPath: '$.People.Person',
headerMap: [
['$.Title', 'title', 'string'],
['@.Name', 'name', 'string'],
[{ test: '@.Age<=16', value: 'yes'}, 'child', 'string'],
[{ test: '@.Age>16', select: '@.Age'}, 'age', 'integer']
]
}
)
.then(() => console.log("Done!"))
.catch(err => console.error(err))
```
Input:
```xml
Cape Feare
Bart
10
Marge
36
Lisa
8
Sideshow Bob
Homer Loves Flanders
Homer
39
Ned Flanders
60
```
Output:
```csv
"title","name","child","age"
"Cape Feare","Bart","yes",
"Cape Feare","Marge",,36
"Cape Feare","Lisa","yes",
"Cape Feare","Sideshow Bob",,
"Homer Loves Flanders","Homer",,39
"Homer Loves Flanders","Ned Flanders",,60
```## xmlFlatten2csv(`options`)
### Options
| Property | Type | Notes |
| -------- | ---- | ----- |
| `xmlPath` | `string` | A path to the xml input file.
| `csvPath` | `string` | The path and filename of the generated CSV output file (note that any intermediate folders will be created).
| `rootXMLElement` | `string` | The XML root tag for each subtree to process,
| `pivotPath` | `string` | The jsonpath of the elements to split records on
| `headerMap` | `[array]` | See the [Header Map](#headerMap) section for more details.
| `options` | `object` | See [Additional options](#additional)options.headerMap has the structure:
```javascript
[
[selector, csvHeader, type],
[selector, csvHeader, type],
...
]
```
* _selector_ is either a jsonpath into the subtree, or a condition consisting of a jsonpath test and either
a value or a jsonpath into the subtree
* _type_ must be integer, date or stringFor straightforward linear transformations, where one XML subtree maps to one line of CSV output, consider
__xml2csv__ instead.The additional options are a set of key-value pairs -
| Option | Notes |
| ------ | ----- |
| `namespace` | How to handle namespace prefixes - omit to do nothing, 'strip' to remove prefixes, or any other string to replace the ':' with something else
| `xmllang` | If set to 'wrap', when an element has an xml:lang attribute, create an intermediate wrapper element of named for the attribute value. Eg `Sunny` would effectively become `Sunny`, and can be addressed as `$.description.en` in the header map.
| `transform` | A transformation function applied to the selected JSON objects before running the header map queries. The modified JSON should be the return value of the function, even if it's changed in-place.```bash
$ npm test
```## License
[MIT](https://github.com/wmfs/tymly/xml2csv/blob/master/LICENSE)