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
[](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.
|