Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@wmfs/xml-flatten2csv

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wmfs/xml-flatten2csv

Flattened XML file to CSV file

  • 1.9.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
21
decreased by-36.36%
Maintainers
1
Weekly downloads
 
Created
Source

xml-flatten2csv

Tymly Package npm (scoped) CircleCI codecov CodeFactor Dependabot badge Commitizen friendly JavaScript Style Guide 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

$ npm install xml-flatten2csv --save

Usage

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:

<Simpsons>
    <Episode>
        <Title>Cape Feare</Title>
        <People>
            <Person>
                <Name>Bart</Name>
                <Age>10</Age>
            </Person>
            <Person>
                <Name>Marge</Name>
                <Age>36</Age>
            </Person>
            <Person>
                <Name>Lisa</Name>
                <Age>8</Age>
            </Person>
            <Person>
                <Name>Sideshow Bob</Name>
            </Person>
        </People>
    </Episode>
    <Episode>
        <Title>Homer Loves Flanders</Title>
        <People>
            <Person>
                <Name>Homer</Name>
                <Age>39</Age>
            </Person>
            <Person>
                <Name>Ned Flanders</Name>
                <Age>60</Age>
            </Person>
        </People>
    </Episode>
</Simpsons>

Output:

"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

PropertyTypeNotes
xmlPathstringA path to the xml input file.
csvPathstringThe path and filename of the generated CSV output file (note that any intermediate folders will be created).
rootXMLElementstringThe XML root tag for each subtree to process,
pivotPathstringThe jsonpath of the elements to split records on
headerMap[array]See the Header Map section for more details.
optionsobjectSee Additional options

options.headerMap

options.headerMap has the structure:

[
    [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 string

For straightforward linear transformations, where one XML subtree maps to one line of CSV output, consider xml2csv instead.

Additional Options

The additional options are a set of key-value pairs -

OptionNotes
namespaceHow to handle namespace prefixes - omit to do nothing, 'strip' to remove prefixes, or any other string to replace the ':' with something else
xmllangIf set to 'wrap', when an element has an xml:lang attribute, create an intermediate wrapper element of named for the attribute value. Eg <description xml:lang='en'>Sunny</description> would effectively become <description><en>Sunny</en></description>, and can be addressed as $.description.en in the header map.
transformA 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.

Testing

$ npm test

License

MIT

Keywords

FAQs

Package last updated on 13 Mar 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc