class Nokogiri::XML::NodeSet

Nokogiri::XML::Searchable#css or Nokogiri::XML::Searchable#xpath
a NodeSet is return as a result of searching a Document via
A NodeSet contains a list of Nokogiri::XML::Node objects. Typically
###

def ==(other)

element in the other NodeSet
of elements and if each element is equal to the corresponding
Equality -- Two NodeSets are equal if the contain the same number
##
def ==(other)
  return false unless other.is_a?(Nokogiri::XML::NodeSet)
  return false unless length == other.length
  each_with_index do |node, i|
    return false unless node == other[i]
  end
  true
end

def add_class(name)

See Nokogiri::XML::Node#add_class for more information.

NodeSet.
Add the class attribute +name+ to all Node objects in the
##
def add_class(name)
  each do |el|
    el.add_class(name)
  end
  self
end

def after(datum)

Insert +datum+ after the last Node in this NodeSet
##
def after(datum)
  last.after(datum)
end

def append_class(name)

See Nokogiri::XML::Node#append_class for more information.

NodeSet.
Append the class attribute +name+ to all Node objects in the
##
def append_class(name)
  each do |el|
    el.append_class(name)
  end
  self
end

def at(*args)


node_set.at(3) # same as node_set[3]

Or, if passed an integer, index into the NodeSet:

See Searchable#search for more information.

result. +paths+ must be one or more XPath or CSS queries.
Search this object for +paths+, and return only the first

call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
##
def at(*args)
  if args.length == 1 && args.first.is_a?(Numeric)
    return self[args.first]
  end
  super(*args)
end

def attr(key, value = nil, &block)


node_set.attr("class") { |node| node.name }

for that node:
the NodeSet and the return value used as the attribute value
If +block+ is passed, it will be called on each Node object in

node_set.attr("href", "https://www.nokogiri.org")

for all nodes:
If +value+ is passed, it will be used as the attribute value

node_set.attr("href" => "https://www.nokogiri.org", "class" => "member")

key/value pair:
If +key+ is a Hash then attributes will be set for each

must be passed.
If +key+ is an attribute name, then either +value+ or +block+

called as a setter, +#attr+ returns the NodeSet.
attribute name, or a Hash of attribute names and values. When
To set an attribute on each node, +key+ can either be an

Note that an empty NodeSet will return nil when +#attr+ is called as a getter.

node_set.attr("href") # => "https://www.nokogiri.org"

To get an attribute from the first Node in a NodeSet:

attribute from the first Node in the NodeSet.
Set attributes on each Node in the NodeSet, or get an
##
def attr(key, value = nil, &block)
  unless key.is_a?(Hash) || (key && (value || block))
    return first ? first.attribute(key) : nil
  end
  hash = key.is_a?(Hash) ? key : { key => value }
  hash.each do |k, v|
    each do |node|
      node[k] = v || yield(node)
    end
  end
  self
end

def before(datum)

Insert +datum+ before the first Node in this NodeSet
##
def before(datum)
  first.before(datum)
end

def children

the NodeSet
Returns a new NodeSet containing all the children of all the nodes in
##
def children
  node_set = NodeSet.new(document)
  each do |node|
    node.children.each { |n| node_set.push(n) }
  end
  node_set
end

def css(*args)

For more information see Nokogiri::XML::Searchable#css

selectors. For example:
Search this node set for CSS +rules+. +rules+ must be one or more CSS

call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
##
def css(*args)
  rules, handler, ns, _ = extract_params(args)
  paths = css_rules_to_xpath(rules, ns)
  inject(NodeSet.new(document)) do |set, node|
    set + xpath_internal(node, paths, handler, ns, nil)
  end
end

def each

Iterate over each node, yielding to +block+
##
def each
  return to_enum unless block_given?
  0.upto(length - 1) do |x|
    yield self[x]
  end
  self
end

def empty?

Is this NodeSet empty?
##
def empty?
  length == 0
end

def filter(expr)

Filter this list for nodes that match +expr+
##
def filter(expr)
  find_all { |node| node.matches?(expr) }
end

def first(n = nil)

Get the first element of the NodeSet.
##
def first(n = nil)
  return self[0] unless n
  list = []
  [n, length].min.times { |i| list << self[i] }
  list
end

def index(node = nil)

Returns the index of the first node in self that is == to +node+ or meets the given block. Returns nil if no match is found.
##
def index(node = nil)
  if node
    warn("given block not used") if block_given?
    each_with_index { |member, j| return j if member == node }
  elsif block_given?
    each_with_index { |member, j| return j if yield(member) }
  end
  nil
end

def initialize(document, list = [])

Create a NodeSet with +document+ defaulting to +list+
def initialize(document, list = [])
  @document = document
  document.decorate(self)
  list.each { |x| self << x }
  yield self if block_given?
end

def inner_html(*args)

Get the inner html of all contained Node objects
##
def inner_html(*args)
  collect { |j| j.inner_html(*args) }.join("")
end

def inner_text

See Nokogiri::XML::Node#content for more information.

doc.css('d').map(&:text) # => ["foo", "bar"]

Instead, if you want to return the text of all nodes in the NodeSet:

doc.css('d').text # => "foobar"
doc = Nokogiri::XML('foobar')

Note: This joins the text of all Node objects in the NodeSet:

Get the inner text of all contained Node objects
##
def inner_text
  collect(&:inner_text).join("")
end

def inspect

Return a nicely formated string representation
##
def inspect
  "[#{map(&:inspect).join(", ")}]"
end

def last

Get the last element of the NodeSet.
##
def last
  self[-1]
end

def pop

the set is empty
Removes the last element from set and returns it, or +nil+ if
##
def pop
  return nil if length == 0
  delete(last)
end

def remove_attr(name)

Remove the attributed named +name+ from all Node objects in the NodeSet
##
def remove_attr(name)
  each { |el| el.delete(name) }
  self
end

def remove_class(name = nil)

See Nokogiri::XML::Node#remove_class for more information.

NodeSet.
Remove the class attribute +name+ from all Node objects in the
##
def remove_class(name = nil)
  each do |el|
    el.remove_class(name)
  end
  self
end

def reverse

in reverse order
Returns a new NodeSet containing all the nodes in the NodeSet
##
def reverse
  node_set = NodeSet.new(document)
  (length - 1).downto(0) do |x|
    node_set.push(self[x])
  end
  node_set
end

def shift

+nil+ if the set is empty.
Returns the first element of the NodeSet and removes it. Returns
##
def shift
  return nil if length == 0
  delete(first)
end

def to_html(*args)

Convert this NodeSet to HTML
##
def to_html(*args)
  if Nokogiri.jruby?
    options = args.first.is_a?(Hash) ? args.shift : {}
    unless options[:save_with]
      options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
    end
    args.insert(0, options)
  end
  map { |x| x.to_html(*args) }.join
end

def to_s

Convert this NodeSet to a string.
##
def to_s
  map(&:to_s).join
end

def to_xhtml(*args)

Convert this NodeSet to XHTML
##
def to_xhtml(*args)
  map { |x| x.to_xhtml(*args) }.join
end

def to_xml(*args)

Convert this NodeSet to XML
##
def to_xml(*args)
  map { |x| x.to_xml(*args) }.join
end

def wrap(html)

Wrap this NodeSet with +html+
##
def wrap(html)
  map { |node| node.wrap(html) }
end

def xpath(*args)

For more information see Nokogiri::XML::Searchable#xpath

queries.
Search this node set for XPath +paths+. +paths+ must be one or more XPath

call-seq: xpath *paths, [namespace-bindings, variable-bindings, custom-handler-class]
##
def xpath(*args)
  paths, handler, ns, binds = extract_params(args)
  inject(NodeSet.new(document)) do |set, node|
    set + xpath_internal(node, paths, handler, ns, binds)
  end
end