A NodeSet contains a list of Nokogiri::XML::Node objects. Typically a NodeSet is return as a result of searching a Document via Nokogiri::XML::Searchable#css or Nokogiri::XML::Searchable#xpath
Create a NodeSet with document defaulting to list
# File lib/nokogiri/xml/node_set.rb, line 15 def initialize document, list = [] @document = document document.decorate(self) list.each { |x| self << x } yield self if block_given? end
Equality -- Two NodeSets are equal if the contain the same number of elements and if each element is equal to the corresponding element in the other NodeSet
# File lib/nokogiri/xml/node_set.rb, line 269 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
Search this NodeSet's nodes' immediate children using CSS selector selector
# File lib/nokogiri/xml/node_set.rb, line 97 def > selector ns = document.root.namespaces xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first end
Search this object for paths, and return only the first result. paths must be one or more XPath or CSS queries.
See Searchable#search for more information.
Or, if passed an integer, index into the NodeSet:
node_set.at(3) # same as node_set[3]
# File lib/nokogiri/xml/node_set.rb, line 114 def at *args if args.length == 1 && args.first.is_a?(Numeric) return self[args.first] end super(*args) end
Set the attribute key to value or the return value of blk on all Node objects in the NodeSet.
# File lib/nokogiri/xml/node_set.rb, line 162 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
Search this node set for CSS rules. rules must be one or more CSS selectors. For example:
For more information see Nokogiri::XML::Searchable#css
# File lib/nokogiri/xml/node_set.rb, line 72 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
Iterate over each node, yielding to block
# File lib/nokogiri/xml/node_set.rb, line 185 def each(&block) 0.upto(length - 1) do |x| yield self[x] end end
Is this NodeSet empty?
# File lib/nokogiri/xml/node_set.rb, line 39 def empty? length == 0 end
Filter this list for nodes that match expr
# File lib/nokogiri/xml/node_set.rb, line 125 def filter expr find_all { |node| node.matches?(expr) } end
Get the first element of the NodeSet.
# File lib/nokogiri/xml/node_set.rb, line 24 def first n = nil return self[0] unless n list = [] n.times { |i| list << self[i] } list end
Returns the index of the first node in self that is == to node. Returns nil if no match is found.
# File lib/nokogiri/xml/node_set.rb, line 45 def index(node) each_with_index { |member, j| return j if member == node } nil end
Get the inner html of all contained Node objects
# File lib/nokogiri/xml/node_set.rb, line 200 def inner_html *args collect{|j| j.inner_html(*args) }.join('') end
Get the inner text of all contained Node objects
# File lib/nokogiri/xml/node_set.rb, line 193 def inner_text collect{|j| j.inner_text}.join('') end
Return a nicely formated string representation
# File lib/nokogiri/xml/node_set.rb, line 298 def inspect "[#{map { |c| c.inspect }.join ', '}]" end
Get the last element of the NodeSet.
# File lib/nokogiri/xml/node_set.rb, line 33 def last self[-1] end
Removes the last element from set and returns it, or nil if the set is empty
# File lib/nokogiri/xml/node_set.rb, line 252 def pop return nil if length == 0 delete last end
Remove the class attribute name from all Node objects in the NodeSet. If name is nil, remove the class attribute from all Nodes in the NodeSet.
# File lib/nokogiri/xml/node_set.rb, line 143 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
Returns the first element of the NodeSet and removes it. Returns nil if the set is empty.
# File lib/nokogiri/xml/node_set.rb, line 260 def shift return nil if length == 0 delete first end
# File lib/nokogiri/xml/node_set.rb, line 223 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
Convert this NodeSet to a string.
# File lib/nokogiri/xml/node_set.rb, line 217 def to_s map { |x| x.to_s }.join end
Convert this NodeSet to XHTML
# File lib/nokogiri/xml/node_set.rb, line 236 def to_xhtml *args map { |x| x.to_xhtml(*args) }.join end
Wrap this NodeSet with html or the results of the builder in blk
# File lib/nokogiri/xml/node_set.rb, line 206 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
Search this node set for XPath paths. paths must be one or more XPath queries.
For more information see Nokogiri::XML::Searchable#xpath
# File lib/nokogiri/xml/node_set.rb, line 87 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
Generated with the Darkfish Rdoc Generator 2.