Class: Nokogiri::XML::NodeSet

### Home Classes Methods

### In Files

- lib/nokogiri/xml/node_set.rb

### Parent

Object

### Methods

- ::new
- #%
- #==
- #>
- #add_class
- #after
- #at
- #attr
- #attribute
- #before
- #children
- #css
- #each
- #empty?
- #filter
- #first
- #index
- #inner_html
- #inner_text
- #inspect
- #last
- #pop
- #remove_attr
- #remove_class
- #reverse
- #set
- #shift
- #text
- #to_html
- #to_s
- #to_xhtml
- #to_xml
- #wrap
- #xpath

### Included Modules

- Nokogiri::XML::Searchable
- Enumerable

### Files

- C_CODING_STYLE.rdoc
- Manifest.txt
- README.txt

### Class/Module Index

Quicksearch

- Nokogiri
- Nokogiri::CSS
- Nokogiri::CSS::Node
- Nokogiri::CSS::Parser
- Nokogiri::CSS::SyntaxError
- Nokogiri::CSS::Tokenizer
- Nokogiri::CSS::Tokenizer::ScanError
- Nokogiri::Decorators
- Nokogiri::Decorators::Slop
- Nokogiri::EncodingHandler
- Nokogiri::HTML
- Nokogiri::HTML::Builder
- Nokogiri::HTML::Document
- Nokogiri::HTML::Document::EncodingReader
- Nokogiri::HTML::Document::EncodingReader::JumpSAXHandler
- Nokogiri::HTML::DocumentFragment
- Nokogiri::HTML::ElementDescription
- Nokogiri::HTML::EntityDescription
- Nokogiri::HTML::EntityLookup
- Nokogiri::HTML::SAX
- Nokogiri::HTML::SAX::Parser
- Nokogiri::HTML::SAX::ParserContext
- Nokogiri::HTML::SAX::PushParser
- Nokogiri::SyntaxError
- Nokogiri::XML
- Nokogiri::XML::Attr
- Nokogiri::XML::AttributeDecl
- Nokogiri::XML::Builder
- Nokogiri::XML::CDATA
- Nokogiri::XML::CharacterData
- Nokogiri::XML::Comment
- Nokogiri::XML::DTD
- Nokogiri::XML::Document
- Nokogiri::XML::DocumentFragment
- Nokogiri::XML::Element
- Nokogiri::XML::ElementContent
- Nokogiri::XML::ElementDecl
- Nokogiri::XML::EntityDecl
- Nokogiri::XML::EntityReference
- Nokogiri::XML::Namespace
- Nokogiri::XML::Node
- Nokogiri::XML::Node::SaveOptions
- Nokogiri::XML::NodeSet
- Nokogiri::XML::Notation
- Nokogiri::XML::PP
- Nokogiri::XML::PP::CharacterData
- Nokogiri::XML::PP::Node
- Nokogiri::XML::ParseOptions
- Nokogiri::XML::ProcessingInstruction
- Nokogiri::XML::Reader
- Nokogiri::XML::RelaxNG
- Nokogiri::XML::SAX
- Nokogiri::XML::SAX::Document
- Nokogiri::XML::SAX::Parser
- Nokogiri::XML::SAX::Parser::Attribute
- Nokogiri::XML::SAX::ParserContext
- Nokogiri::XML::SAX::PushParser
- Nokogiri::XML::Schema
- Nokogiri::XML::Searchable
- Nokogiri::XML::SyntaxError
- Nokogiri::XML::Text
- Nokogiri::XML::XPath
- Nokogiri::XML::XPath::SyntaxError
- Nokogiri::XML::XPathContext
- Nokogiri::XSLT
- Nokogiri::XSLT::Stylesheet
- XSD
- XSD::XMLParser
- XSD::XMLParser::Nokogiri

No matching classes.

# 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::Searchable#css or Nokogiri::XML::Searchable#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 15
    def initialize document, list = []
      @document = document
      document.decorate(self)
      list.each { |x| self << x }
      yield self if block_given?
    end

### Public Instance Methods

%(*args) click to toggle source
Alias for: at
==(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 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

>(selector) click to toggle source

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

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 131
    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 58
    def after datum
      last.after datum
    end

search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class] click to toggle source

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

Also aliased as: %
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 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

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 52
    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 281
    def children
      inject(NodeSet.new(document)) { |set, node| set += node.children }
    end

css *rules, [namespace-bindings, custom-pseudo-class] click to toggle source

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

each(&block) click to toggle source

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

empty?() click to toggle source

Is this NodeSet empty?

    # File lib/nokogiri/xml/node_set.rb, line 39
    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 125
    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 24
    def first n = nil
      return self[0] unless n
      list = []
      n.times { |i| list << self[i] }
      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 45
    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 200
    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 193
    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 298
    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 33
    def last
      self[-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 252
    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 178
    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 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

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 288
    def reverse
      node_set = NodeSet.new(document)
      (length - 1).downto(0) do |x|
        node_set.push self[x]
      end
      node_set
    end

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 260
    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 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

to_s() click to toggle source

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

to_xhtml(*args) click to toggle source

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

to_xml(*args) click to toggle source

Convert this NodeSet to XML

    # File lib/nokogiri/xml/node_set.rb, line 242
    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 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

xpath *paths, [namespace-bindings, variable-bindings, custom-handler-class] click to toggle source

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

[Validate]

Generated with the Darkfish Rdoc Generator 2.