
Product
Introducing Pull Request Stories to Help Security Teams Track Supply Chain Risks
Socket’s new Pull Request Stories give security teams clear visibility into dependency risks and outcomes across scanned pull requests.
dom-compare
Advanced tools
NodeJS module to compare two DOM-trees
Works with Node.JS v0.10+
Consider two documents. Expected:
<document>
<!-- comment -->
<element attribute="10" attributeX="100">
<text> text content </text>
<inner>
<node />
</inner>
</element>
<![CDATA[ cdata node]]>
</document>
and actual one:
<document>
<element attribute="100">
<text>text content</text>
<inner />
<inner2 />
</element>
<![CDATA[cdata node ]]>
</document>
One can compare them, get the result (is them equals, or not), and get extended report (why them are different).
var compare = require('dom-compare').compare,
reporter = require('dom-compare').GroupingReporter,
expected = ..., // expected DOM tree
actual = ..., // actual one
result, diff, groupedDiff;
// compare to DOM trees, get a result object
result = compare(expected, actual);
// get comparison result
console.log(result.getResult()); // false cause' trees are different
// get all differences
diff = result.getDifferences(); // array of diff-objects
// differences, grouped by node XPath
groupedDiff = reporter.getDifferences(result); // object, key - node XPATH, value - array of differences (strings)
// string representation
console.log(reporter.report(result));
Diff-object has a following form:
{
node: "/document/element",
message: "Attribute 'attribute': expected value '10' instead of '100'";
}
By using GroupingReporter
one can get a result of a following type
{
'/document/element': [
"Attribute 'attribute': expected value '10' instead of '100'",
"Extra attribute 'attributeX'"
]
}
Comparison function can take a third argument with options like this:
var options = {
stripSpaces: true,
compareComments: true,
collapseSpaces: true,
normalizeNewlines: true
};
result = compare(expected, actual, options);
By default, all comments are ignored. Set compareComments
options to true
to compare them too.
By default, all text nodes (text, CDATA, comments if enabled as mentioned above) compared with respect
to leading, trailing, and internal whitespaces.
Set stripSpaces
option to true
to automatically strip spaces in text and comment nodes. This option
doesn't change the way CDATA sections is compared, they are always compared with respect to whitespaces.
Set collapseSpaces
option to true
to automatically collapse all spaces in text and comment nodes.
This option doesn't change the way CDATA sections is compared, they are always compared with respect to
whitespaces.
Set normalizeNewlines
option to true
to automatically normalize new line characters in text,
comment, and CDATA nodes.
When installed globally with npm install -g dom-compare
cli utility is available.
See usage information and command-line options with domcompare --help
You can try it on bundled samples:
$ cd samples
$ domcompare -s ./expected.xml ./actual.xml
Documents are not equal
/document/element
Attribute 'attribute': expected value '10' instead of '100'
Attribute 'attributeX' is missed
Extra element 'inner2'
/document/element/inner
Element 'node' is missed
/document
Expected CDATA value ' cdata node' instead of 'cdata node '
Implemented as XMLSerializer interface
Simple rules
Consider the following XML-document...
<document>
<element>DOM Compare</element>
<emptyNode></emptyNode>
<element attribute1="value" attribute2="value">
<element>Text node</element>
</element>
</document>
...and code snippet...
var canonizingSerializer = new (require('dom-compare').XMLSerializer)();
var doc = ...; // parse above document somehow
console.log(canonizingSerializer.serializeToString(doc));
You'll receive the following output
<document>
<element>
DOM Compare
</element>
<emptyNode />
<element
attribute1="value"
attribute2="value">
<element>
Text node
</element>
</element>
</document>
v0.6.0, 14.10.2019
FAQs
Library to compare two DOM trees
The npm package dom-compare receives a total of 5,125 weekly downloads. As such, dom-compare popularity was classified as popular.
We found that dom-compare demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Product
Socket’s new Pull Request Stories give security teams clear visibility into dependency risks and outcomes across scanned pull requests.
Research
/Security News
npm author Qix’s account was compromised, with malicious versions of popular packages like chalk-template, color-convert, and strip-ansi published.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.