npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mergexml

v1.2.4

Published

Merge multiple XML sources

Downloads

379,717

Readme

JS MergeXML npm version

MergeXML merges the XML sources (files, strings, objects) into single DOM XML object. The merging is performed recursively on the node level adding new elements and replacing existing ones. The nodes with the same path/name are replaced/added sequentially and the modification can be controlled by the options.

MergeXML could be useful in cases where it is necessary to gather XML data from multiple sources. For example, to combine configuration files of different subsystems depending on the application logic.

Main browsers (Chrome, Edge, IE, Firefox, Safari, Opera) and NodeJS (see below) are supported. The MergeXML is realized also in PHP (see php-merge-xml).

The usage

MergeXML class can be included:

  1. loading as a CommonJS module:

const MergeXML = require('./mergexml');

  1. as a global script:

<script src="mergexml.js"></script>

The class instantiation:

var oMX = new MergeXML([opts]);

or loading and instantiating at once:

const oMX = new (require('./mergexml.js'))([opts]);

opts - the options object:

  • join - common root name if any source has different root name (default is root, specifying false denies different names)
  • updn - traverse the nodes by name sequence (true, default) or overall sequence (false)
  • stay - the stay attribute value to deny overwriting of specific node (default is all, can be array of values or empty)
  • path - require path to NodeJS modules (default is looking from node_modules, N/A for browsers)

oMX.AddSource(source);

source - XML string or DOM object

oMX.AddFile(elem);

elem - FileList element of the XML file (browsers only)

The methods merge a sequent source and return the final object or false if failed (see error property below).

oMX.Init([opts]);

Clear existing result to restart.

opts - the options object as above (except path)

You can search in the result object:

oMX.Query(expr);

expr - XPath query expression

You can get the XML result tree:

oMX.Get([0|1|2]);

  • 0 - object (default)
  • 1 - text
  • 2 - html

The result object can be accessed also via oMX.dom property. The properties available:

  • dom - result XML DOM object (in older IE browsers this is an ActiveX Object, not a standard XML Document)
  • nsp - namespaces list object (prefix:URI)
  • count - number of sources merged
  • error - error information
    • error.code ('' is ok)
    • error.text

The sources must have the same default namespace (if have at all). Prefix '_' is reserved to handle the default namespace. IE doesn't allow replacement of the root node attributes.

Installation

Run from the appropriate directory:

npm install mergexml

Or manually download the js-merge-xml package from Github and unzip the files into installation directory.

Run the sample in your browser (HTML5 compatible):

  1. open example.html
  2. choose the xml files to be merged (test folder)
  3. click Merge button
  4. the merged xml is displayed...

The tests

To run the browsers' tests from the CLI:

  1. go to installation directory
  2. install framework: npm install --dev
  3. run the tests: npm test
  4. the results are displayed...
  5. to remove the test modules: npm prune --prod

NodeJS

The browser window objects' (DOMParser, XPathEvaluator, XMLSerializer) functionality is implemented by the xpath, xmldom modules as node global objects. The sample requires also the formidable module.

Install the dependent modules:

npm install --prod

Start NodeJS with the sample script:

node examplen.js

Run the sample in your browser:

http://localhost:3000

The package

The following files are included:

  1. mergexml.js - MergeXML class supporting the browser and NodeJS environments;
  2. example.html - multi-selects the xml files and displays result (browser);
  3. example.js - passes the xml data and returns result (browser);
  4. examplen.htm - client-side template to multi-select the xml files and display result (NodeJS);
  5. examplen.js - server-side module to receive requests and response results (NodeJS);
  6. package.json, bower.json - package details;
  7. test - a folder with the (browser) testing files.

ChangeLog

June/July 2015 (Martijn van de Rijdt)

  • mergexml.js
    • the wrapper is added for a compatibility with the AMD/CommonJS-like environments
  • test
    • automated browser tests

October 2016 (Martijn van de Rijdt)

  • mergexml.js
    • cloning the namespaced attributes correctly
    • mixing sources of undeclared encoding

August 2019 (Vallo Reima)

  • mergexml.js
    • NodeJS environment support
  • examplen.js, examplen.htm
    • NodeJS usage sample

September 2021 (eyelidlessness)

  • mergexml.js
    • Upgrade xmldom to @xmldom/xmldom