Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/emmetio/xml-diff

Diff and patch contents of XML documents
https://github.com/emmetio/xml-diff

diff patch xml

Last synced: 3 months ago
JSON representation

Diff and patch contents of XML documents

Awesome Lists containing this project

README

        

# Diff XML documents

The goal of this module is to calculate diff between *text content* of two XML or HTML documents, preserving its tag structure:

```js
import diff from '@emmetio/xml-diff';

const from = `

Lorem ipsum dolor sit amet consectetur, adipisicing elit.


`;
const to = `

Lorem ipsum dolor sit amet aspernatur, doloribus in libero.


`;

const result = diff(from, to);
console.log(result);
/*

Lorem ipsum dolor sit amet consectetur, adipisicing elitaspernatur, doloribus in libero.

*/
```

---
> Project development is sponsored by [Xcential Corporation](https://xcential.com)
---

## Features
* **High performance**: uses [small and fast XML scanner](https://github.com/emmetio/html-matcher), written in pure JavaScript.
* **Supports multiple dialects**: able to parse invalid HTML, even JSX and Angular templates.
* **Works everywhere**: doesn’t use browser DOM or APIs, runs in any browser, Node.JS and WebWorkers.

## Installation & usage

Install it as regular npm module:

```
npm install @emmetio/xml-diff
```

This module exposes main `diff(from, to)` function which accepts two text documents and returns patched `to` document with updates marked with `` and `` tags.

## How it works

* Takes XML document and strips all markup data from it (tags, comments, CDATA etc.), leaving plain text content: `

Hello world!
` → `Hello world!`.
* Collapses and reduces insignificant white space characters like new lines, tabs and so on into a single space to reduce noise when comparing formatted documents.
* Performs diff with Google’s [Diff Match Patch](https://github.com/google/diff-match-patch) library.
* Applies patches to second document’s (`to`) plain content.
* Restores markup and whitespace data of original document