common-xml-features

Common XML API for renderer, node and master process

Usage no npm install needed!

<script type="module">
  import commonXmlFeatures from 'https://cdn.skypack.dev/common-xml-features';
</script>

README

Introduction

When working on Electron, you may have the same code executed in the renderer process and in the master/node process.

It could be an issue if you have to manage XML :

  • Which XML libraries to use in a node process ?
  • How code could be the same in both contexts (renderer, node) ?
  • Impact of the XML libraries in the size of the browserify'ied files ?

Many browser supports natively XML features like DOMParser, XMLSerializer,... it would be a shame to not use Chrome's implementations when hosted in a renderer process.

Purposes

Purposes of this package are :

  • whatever the context, provide a common API for accessing XM features
  • when loaded in a node context
  • when loaded in a renderer context
    • fallbacks to native implementation and prevent xmldom and xmlpath to be inlined by browserify

Samples

import * as XMLFeatures from 'common-xml-features';

let xmlDoc = new XMLFeatures.DOMParser().parseFromString(result, 'text/xml');
if (XMLFeatures.getParserError(xmlDoc)) {
    // we are in trouble !
}

let entityResult = xmlDoc.evaluate('//html//body//iframe//@src', null, null, XMLFeatures.XPathResult.FIRST_ORDERED_NODE_TYPE, null);
assert(entityResult.nodeType === XMLFeatures.Node.ELEMENT_NODE)
...
let xmlDoc = new XMLFeatures.domImplementation.createDocument(null, null, null);
...
let xmlSerializer = new XMLFeatures.XMLSerializer();
let transferData = xmlSerializer.serializeToString(xmlDoc);

API

You have to use proxy to be redirected to the right class factory according to the context :

  • (common-xml-features).DOMImplementation
  • (common-xml-features).DOMParser
  • (common-xml-features).XMLSerializer Other objects like Node, Element, Document are pure interfaces and are created through methods of classes above.

Some interfaces are exported as well :

  • (common-xml-features).XPathResult
  • (common-xml-features).XPathExpression
  • (common-xml-features).XPathNSResolver

A helper function (experimental, returned value is not yet defined) for checking if the document is a content

  • (common-xml-features).getParserError You can check if it returns null (no error) or not (parsing error).

Next

  1. Support another browsers : IE, Edge, Safari, ...