Skip to content

emmkimme/common-xml-features

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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, ...

About

Electron renderer/node/master process common Api for XML features (DOM, XPath)

Resources

License

Stars

Watchers

Forks

Packages

No packages published