File: README.md

package info (click to toggle)
ruby-nokogiri-diff 0.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 148 kB
  • sloc: ruby: 272; makefile: 2
file content (81 lines) | stat: -rw-r--r-- 2,058 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# nokogiri-diff

[![CI](https://github.com/postmodern/nokogiri-diff/actions/workflows/ruby.yml/badge.svg)](https://github.com/postmodern/nokogiri-diff/actions/workflows/ruby.yml)

* [Source](https://github.com/postmodern/nokogiri-diff)
* [Issues](https://github.com/postmodern/nokogiri-diff/issues)
* [Documentation](http://rubydoc.info/gems/nokogiri-diff/frames)

## Description

nokogiri-diff adds the ability to calculate the differences (added or
removed nodes) between two XML/HTML documents.

## Features

* Performs a breadth-first comparison between children nodes.
* Compares XML/HTML Elements, Attributes, Text nodes and DTD nodes.
* Allows calculating differences between documents, or just enumerating the
  added or removed nodes.

## Examples

Enumerate over the differences between two HTML documents:

```ruby
require 'nokogiri/diff'

doc1 = Nokogiri::HTML('<div><p>one</p> two </div>')
doc2 = Nokogiri::HTML('<div><p id="1">one</p> <p>three</p></div>')

doc1.diff(doc2) do |change,node|
  puts "#{change} #{node.to_html}".ljust(30) + node.parent.path
end

#   <div>
# <p>one</p> two </div> /
#   <p>one</p>                  /div
# -  two                        /div
# +                             /div
# + <p>three</p>                /div
# +  id="1"                     /div/p[1]
#   one                         /div/p
```

Only find the added nodes:

```ruby
doc1.diff(doc2, :added => true) do |change,node|
  puts node.to_html.ljust(30) + node.parent.path
end

#                               /div
# <p>three</p>                  /div
#  id="1"                       /div/p[1]
```

Only find the removed nodes:

```ruby
doc1.diff(doc2, :removed => true) do |change,node|
  puts node.to_html.ljust(30) + node.parent.path
end

#  two                          /div
```

## Requirements

* [ruby](http://www.ruby-lang.org/) >= 2.0.0
* [tdiff](http://github.com/postmodern/tdiff) ~> 0.4
* [nokogiri](http://nokogiri.rubyforge.org/) ~> 1.5

## Install

```shell
$ gem install nokogiri-diff
```

## License

See {file:LICENSE.txt} for details.