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)
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)
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)
##
def after(datum) last.after(datum) end
def append_class(name)
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&.attribute(key) 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)
##
def before(datum) first.before(datum) end
def children
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)
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 deconstruct
Since v1.14.0
Returns the members of this NodeSet as an array, to use in pattern matching.
:call-seq: deconstruct() → Array
def deconstruct to_a end
def each
##
def each return to_enum unless block_given? 0.upto(length - 1) do |x| yield self[x] end self end
def empty?
##
def empty? length == 0 end
def filter(expr)
##
def filter(expr) find_all { |node| node.matches?(expr) } end
def first(n = nil)
##
def first(n = nil) return self[0] unless n list = [] [n, length].min.times { |i| list << self[i] } list end
def index(node = nil)
##
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 = [])
def initialize(document, list = []) @document = document document.decorate(self) list.each { |x| self << x } yield self if block_given? end
def inner_html(*args)
##
def inner_html(*args) collect { |j| j.inner_html(*args) }.join("") end
def inner_text
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('
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
##
def inspect "[#{map(&:inspect).join(", ")}]" end
def last
##
def last self[-1] end
def pop
Removes the last element from set and returns it, or +nil+ if
##
def pop return if length == 0 delete(last) end
def remove_attr(name)
##
def remove_attr(name) each { |el| el.delete(name) } self end
def remove_class(name = nil)
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
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
Returns the first element of the NodeSet and removes it. Returns
##
def shift return if length == 0 delete(first) end
def to_html(*args)
##
def to_html(*args) if Nokogiri.jruby? options = args.first.is_a?(Hash) ? args.shift : {} options[:save_with] ||= Node::SaveOptions::DEFAULT_HTML args.insert(0, options) end if empty? encoding = (args.first.is_a?(Hash) ? args.first[:encoding] : nil) encoding ||= document.encoding encoding.nil? ? "" : "".encode(encoding) else map { |x| x.to_html(*args) }.join end end
def to_s
##
def to_s map(&:to_s).join end
def to_xhtml(*args)
##
def to_xhtml(*args) map { |x| x.to_xhtml(*args) }.join end
def to_xml(*args)
##
def to_xml(*args) map { |x| x.to_xml(*args) }.join end
def wrap(node_or_tags)
#