Introduction

W3C DOM object trees can be used to represent an XML document's structure. It may be convenient to:

  • pass DOM representations of an XML document as inputs to XML Compare's comparison pipeline, and

  • get a DOM document as the result of a comparison.

This sample illustrates how DOM documents can be both passed as input and produced as output from a comparison pipeline.

Outline of the Approach

Essentially the approach is to:

  1. Prepare a Saxon processor

  2. Prepare a comparator pipeline (which uses the Saxon processor)

  3. Convert the input DOM documents into Saxon XdmNode trees (using the Saxon processor)

  4. Perform the comparison;

  5. Convert the result into a DOM document.

Preparing a Saxon processor

We construct a new Saxon processor as follows:

Processor proc= new Processor(false);
JAVA

Preparing an XML Compare comparator

We create a pipelined comparator that uses the existing Saxon processor as follows:

PipelinedComparatorS9 pc= new PipelinedComparatorS9(proc);
JAVA

Note, if the supplied Saxon processor is a Saxon HE (Home Edition) processor then there may be compatibility issues if the pipeline uses any filters which in turn use Saxon PE or EE features.

Converting a DOM document into a Saxon XdmNode tree

We make use of a Saxon processor to convert a W3C DOM document (doc) from location (loc) into Saxon XdmNode tree as follows:

DOMSource source= new DOMSource(doc, loc);
XdmNode xdmNode= proc.newDocumentBuilder().build(source);
JAVA

Preparing a DOM destination

We create a Saxon DOM destination as follows:

Comparing the XdmNode trees

We perform the XML comparison as follows.

XdmNode result= pc.compare(xdmNode1, xdmNode2);
JAVA

Convert the resulting XdmNode into a DOM document

We create and populate a DOM document as follows:

Document doc= docBuilder.newDocument();
DOMDestination dest= new DOMDestination(doc);
proc.writeXdmValue(result, dest);
JAVA

Running the sample

Download the sample from https://bitbucket.org/deltaxml/using-w3c-dom

The sample resources need to be checked-out, cloned or downloaded and unzipped into the samples directory of the XML Compare release. The resources should be located such that they are two levels below the top level release directory, for example DeltaXML-XML-Compare-10_0_0_j/samples/usingDOM.

Details of how to run the sample are given in README.md, displayed in Bitbucket under the list of source files.

Further Details

See the commentary in the UsingDOM.java source file.