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 > selector
##
def > selector ns = document.root.namespaces xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first end
def add_class name
##
def add_class name each do |el| classes = el['class'].to_s.split(/\s+/) el['class'] = classes.push(name).uniq.join " " end self end
def after datum
##
def after datum last.after datum 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, &blk
Set the attribute +key+ to +value+ or the return value of +blk+
##
def attr key, value = nil, &blk unless Hash === key || key && (value || blk) return first.attribute(key) end hash = key.is_a?(Hash) ? key : { key => value } hash.each { |k,v| each { |el| el[k] = v || blk[el] } } 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 inject(NodeSet.new(document)) { |set, node| set += node.children } 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) inject(NodeSet.new(document)) do |set, node| set += css_internal node, rules, handler, ns end end
def each(&block)
##
def each(&block) 0.upto(length - 1) do |x| yield self[x] end 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.times { |i| list << self[i] } list end
def implied_xpath_contexts # :nodoc:
def implied_xpath_contexts # :nodoc: [".//", "self::"] end
def index(node)
##
def index(node) each_with_index { |member, j| return j if member == node } 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 nil 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
If +name+ is nil, remove the class attribute from all Nodes in the
Remove the class attribute +name+ from all Node objects in the NodeSet.
##
def remove_class name = nil each do |el| if name classes = el['class'].to_s.split(/\s+/) if classes.empty? el.delete 'class' else el['class'] = (classes - [name]).uniq.join " " end else el.delete "class" end 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 nil 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 : {} if !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
##
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(html, &blk)
##
def wrap(html, &blk) each do |j| new_parent = document.parse(html).first j.add_next_sibling(new_parent) new_parent.add_child(j) end self end
def xpath *args
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 += node.xpath(*(paths + [ns, handler, binds].compact)) end end