Parent

Included Modules

Class/Module Index [+]

Quicksearch

Nokogiri::XML::NodeSet

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::Node#css or Nokogiri::XML::Node#xpath

Attributes

document[RW]

The Document this NodeSet is associated with

Public Class Methods

new(document, list = []) click to toggle source

Create a NodeSet with document defaulting to list

# File lib/nokogiri/xml/node_set.rb, line 14
def initialize document, list = []
  @document = document
  document.decorate(self)
  list.each { |x| self << x }
  yield self if block_given?
end

Public Instance Methods

%(path, ns = document.root ? document.root.namespaces : {}) click to toggle source
Alias for: at
/(*paths) click to toggle source
Alias for: search
==(other) click to toggle source

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 321
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
>(selector) click to toggle source

Search this NodeSet's nodes' immediate children using CSS selector selector

# File lib/nokogiri/xml/node_set.rb, line 143
def > selector
  ns = document.root.namespaces
  xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first
end
add_class(name) click to toggle source

Append the class attribute name to all Node objects in the NodeSet.

# File lib/nokogiri/xml/node_set.rb, line 183
def add_class name
  each do |el|
    classes = el['class'].to_s.split(/\s+/)
    el['class'] = classes.push(name).uniq.join " "
  end
  self
end
after(datum) click to toggle source

Insert datum after the last Node in this NodeSet

# File lib/nokogiri/xml/node_set.rb, line 59
def after datum
  last.after datum
end
at(path, ns = document.root ? document.root.namespaces : {}) click to toggle source

If path is a string, search this document for path returning the first Node. Otherwise, index in to the array with path.

# File lib/nokogiri/xml/node_set.rb, line 151
def at path, ns = document.root ? document.root.namespaces : {}
  return self[path] if path.is_a?(Numeric)
  search(path, ns).first
end
Also aliased as: %
at_css(*rules) click to toggle source

Search this NodeSet for the first occurrence of CSS rules. Equivalent to css(rules).first See NodeSet#css for more information.

# File lib/nokogiri/xml/node_set.rb, line 171
def at_css *rules
  css(*rules).first
end
at_xpath(*paths) click to toggle source

Search this NodeSet for the first occurrence of XPath paths. Equivalent to xpath(paths).first See NodeSet#xpath for more information.

# File lib/nokogiri/xml/node_set.rb, line 162
def at_xpath *paths
  xpath(*paths).first
end
attr(key, value = nil, &blk) click to toggle source

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 214
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
Also aliased as: set, attribute
attribute(key, value = nil, &blk) click to toggle source
Alias for: attr
before(datum) click to toggle source

Insert datum before the first Node in this NodeSet

# File lib/nokogiri/xml/node_set.rb, line 53
def before datum
  first.before datum
end
children() click to toggle source

Returns a new NodeSet containing all the children of all the nodes in the NodeSet

# File lib/nokogiri/xml/node_set.rb, line 333
def children
  inject(NodeSet.new(document)) { |set, node| set += node.children }
end
css(*paths) click to toggle source

Search this NodeSet for css paths

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

# File lib/nokogiri/xml/node_set.rb, line 96
def css *paths
  handler = ![
    Hash, String, Symbol
  ].include?(paths.last.class) ? paths.pop : nil

  ns = paths.last.is_a?(Hash) ? paths.pop : nil

  sub_set = NodeSet.new(document)

  each do |node|
    doc = node.document
    search_ns = ns || (doc.root ? doc.root.namespaces : {})

    xpaths = paths.map { |rule|
      [
        CSS.xpath_for(rule.to_s, :prefix => ".//", :ns => search_ns),
        CSS.xpath_for(rule.to_s, :prefix => "self::", :ns => search_ns)
      ].join(' | ')
    }

    sub_set += node.xpath(*(xpaths + [search_ns, handler].compact))
  end
  document.decorate(sub_set)
  sub_set
end
each(&block) click to toggle source

Iterate over each node, yielding to block

# File lib/nokogiri/xml/node_set.rb, line 237
def each(&block)
  0.upto(length - 1) do |x|
    yield self[x]
  end
end
empty?() click to toggle source

Is this NodeSet empty?

# File lib/nokogiri/xml/node_set.rb, line 40
def empty?
  length == 0
end
filter(expr) click to toggle source

Filter this list for nodes that match expr

# File lib/nokogiri/xml/node_set.rb, line 177
def filter expr
  find_all { |node| node.matches?(expr) }
end
first(n = nil) click to toggle source

Get the first element of the NodeSet.

# File lib/nokogiri/xml/node_set.rb, line 23
def first n = nil
  return self[0] unless n
  list = []
  0.upto(n - 1) do |i|
    list << self[i]
  end
  list
end
index(node) click to toggle source

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 46
def index(node)
  each_with_index { |member, j| return j if member == node }
  nil
end
inner_html(*args) click to toggle source

Get the inner html of all contained Node objects

# File lib/nokogiri/xml/node_set.rb, line 252
def inner_html *args
  collect{|j| j.inner_html(*args) }.join('')
end
inner_text() click to toggle source

Get the inner text of all contained Node objects

# File lib/nokogiri/xml/node_set.rb, line 245
def inner_text
  collect{|j| j.inner_text}.join('')
end
Also aliased as: text
inspect() click to toggle source

Return a nicely formated string representation

# File lib/nokogiri/xml/node_set.rb, line 350
def inspect
  "[#{map { |c| c.inspect }.join ', '}]"
end
last() click to toggle source

Get the last element of the NodeSet.

# File lib/nokogiri/xml/node_set.rb, line 34
def last
  self[length - 1]
end
pop() click to toggle source

Removes the last element from set and returns it, or nil if the set is empty

# File lib/nokogiri/xml/node_set.rb, line 304
def pop
  return nil if length == 0
  delete last
end
remove_attr(name) click to toggle source

Remove the attributed named name from all Node objects in the NodeSet

# File lib/nokogiri/xml/node_set.rb, line 230
def remove_attr name
  each { |el| el.delete name }
  self
end
remove_class(name = nil) click to toggle source

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 195
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
reverse() click to toggle source

Returns a new NodeSet containing all the nodes in the NodeSet in reverse order

# File lib/nokogiri/xml/node_set.rb, line 340
def reverse
  node_set = NodeSet.new(document)
  (length - 1).downto(0) do |x|
    node_set.push self[x]
  end
  node_set
end
search(*paths) click to toggle source

Search this document for paths

For more information see Nokogiri::XML::Node#css and Nokogiri::XML::Node#xpath

# File lib/nokogiri/xml/node_set.rb, line 71
def search *paths
  handler = ![
    Hash, String, Symbol
  ].include?(paths.last.class) ? paths.pop : nil

  ns = paths.last.is_a?(Hash) ? paths.pop : nil

  sub_set = NodeSet.new(document)

  paths.each do |path|
    sub_set += send(
      path =~ /^(\.\/|\/|\.\.|\.$)/ ? :xpath : :css,
      *(paths + [ns, handler]).compact
    )
  end

  document.decorate(sub_set)
  sub_set
end
Also aliased as: /
set(key, value = nil, &blk) click to toggle source
Alias for: attr
shift() click to toggle source

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 312
def shift
  return nil if length == 0
  delete first
end
text() click to toggle source
Alias for: inner_text
to_html(*args) click to toggle source

Convert this NodeSet to HTML

# File lib/nokogiri/xml/node_set.rb, line 275
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
to_s() click to toggle source

Convert this NodeSet to a string.

# File lib/nokogiri/xml/node_set.rb, line 269
def to_s
  map { |x| x.to_s }.join
end
to_xhtml(*args) click to toggle source

Convert this NodeSet to XHTML

# File lib/nokogiri/xml/node_set.rb, line 288
def to_xhtml *args
  map { |x| x.to_xhtml(*args) }.join
end
to_xml(*args) click to toggle source

Convert this NodeSet to XML

# File lib/nokogiri/xml/node_set.rb, line 294
def to_xml *args
  map { |x| x.to_xml(*args) }.join
end
wrap(html, &blk) click to toggle source

Wrap this NodeSet with html or the results of the builder in blk

# File lib/nokogiri/xml/node_set.rb, line 258
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
xpath(*paths) click to toggle source

Search this NodeSet for XPath paths

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

# File lib/nokogiri/xml/node_set.rb, line 126
def xpath *paths
  handler = ![
    Hash, String, Symbol
  ].include?(paths.last.class) ? paths.pop : nil

  ns = paths.last.is_a?(Hash) ? paths.pop : nil

  sub_set = NodeSet.new(document)
  each do |node|
    sub_set += node.xpath(*(paths + [ns, handler].compact))
  end
  document.decorate(sub_set)
  sub_set
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.