class Nokogiri::XML::Node

Public Instance Methods

diff(other,options={}) { |change, node| ... } click to toggle source

Finds the differences between the node and another node.

@param [Nokogiri::XML::Node] other

The other node to compare against.

@param [Hash] options

Additional options for filtering changes.

@option options [Boolean] :added

Yield nodes that were added.

@option options [Boolean] :removed

Yield nodes that were removed.

@yield [change, node]

The given block will be passed each changed node.

@yieldparam [' ', '-', '+'] change

Indicates whether the node stayed the same, was removed or added.

@yieldparam [Nokogiri::XML::Node] node

The changed node.

@return [Enumerator]

If no block was given, an Enumerator object will be returned.
# File lib/nokogiri/diff/xml/node.rb, line 84
def diff(other,options={},&block)
  return enum_for(__method__,other,options) unless block

  if (options[:added] || options[:removed])
    tdiff_unordered(other) do |change,node|
      if    (change == '+' && options[:added])   then yield change, node
      elsif (change == '-' && options[:removed]) then yield change, node
      end
    end
  else
    tdiff(other,&block)
  end
end
tdiff_each_child(node,&block) click to toggle source

Enumerates over the children of another XML/HTML node.

@param [Nokogiri::XML::Node] node

The other XMl/HTML node.

@yield [child]

The given block will be passed every child of the node.

@yieldparam [Nokogiri::XML::Node] node

A child node.
# File lib/nokogiri/diff/xml/node.rb, line 49
def tdiff_each_child(node,&block)
  if node.kind_of?(Nokogiri::XML::Element)
    node.attribute_nodes.sort_by(&:name).each(&block)
  end

  node.children.each(&block)
end
tdiff_equal(node) click to toggle source

Compares the XML/HTML node with another.

@param [Nokogiri::XML::Node] node

The other XMl/HTML node.

@return [Boolean]

Specifies whether the two nodes are equal.
# File lib/nokogiri/diff/xml/node.rb, line 18
def tdiff_equal(node)
  if (self.class == node.class)
    case node
    when Nokogiri::XML::Attr
      (self.name == node.name && self.value == node.value)
    when Nokogiri::XML::Element, Nokogiri::XML::DTD
      self.name == node.name
    when Nokogiri::XML::Text, Nokogiri::XML::Comment
      self.text == node.text
    when Nokogiri::XML::ProcessingInstruction
      (self.name == node.name && self.content = self.content)
    else
      false
    end
  else
    false
  end
end