Class: Nokogiri::XML::NodeSet
- Inherits:
-
Object
- Object
- Nokogiri::XML::NodeSet
- Includes:
- Enumerable, Searchable
- Defined in:
- lib/nokogiri/xml/node_set.rb,
ext/nokogiri/xml_node_set.c
Overview
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
Constant Summary collapse
- IMPLIED_XPATH_CONTEXTS =
[ './/'.freeze, 'self::'.freeze ].freeze
Instance Attribute Summary collapse
-
#document ⇒ Object
The Document this NodeSet is associated with.
Searching via XPath or CSS Queries collapse
-
#at_css(*args) ⇒ Object
included
from Searchable
call-seq: css *rules, [namespace-bindings, custom-pseudo-class].
-
#at_xpath(*args) ⇒ Object
included
from Searchable
call-seq: xpath *paths, [namespace-bindings, variable-bindings, custom-handler-class].
-
#search(*args) ⇒ Object
(also: #/)
included
from Searchable
call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class].
Instance Method Summary collapse
-
#&(node_set) ⇒ Object
Set Intersection — Returns a new NodeSet containing nodes common to the two NodeSets.
-
#-(node_set) ⇒ Object
Difference - returns a new NodeSet that is a copy of this NodeSet, removing each item that also appears in
node_set
. -
#==(other) ⇒ Object
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.
-
#>(selector) ⇒ Object
Search this NodeSet's nodes' immediate children using CSS selector
selector
. -
#[](*args) ⇒ Object
- start, length
-
-> NodeSet or nil [range] -> NodeSet or nil slice(index) -> Node or nil slice(start, length) -> NodeSet or nil slice(range) -> NodeSet or nil.
-
#add_class(name) ⇒ Object
Add the class attribute
name
to all Node objects in the NodeSet. -
#after(datum) ⇒ Object
Insert
datum
after the last Node in this NodeSet. -
#append_class(name) ⇒ Object
Append the class attribute
name
to all Node objects in the NodeSet. -
#at(*args) ⇒ Object
(also: #%)
call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class].
-
#attr(key, value = nil, &block) ⇒ Object
(also: #set, #attribute)
Set attributes on each Node in the NodeSet, or get an attribute from the first Node in the NodeSet.
-
#before(datum) ⇒ Object
Insert
datum
before the first Node in this NodeSet. -
#children ⇒ Object
Returns a new NodeSet containing all the children of all the nodes in the NodeSet.
-
#css(*args) ⇒ Object
call-seq: css *rules, [namespace-bindings, custom-pseudo-class].
-
#delete(node) ⇒ Object
Delete
node
from the Nodeset, if it is a member. -
#dup ⇒ Object
(also: #clone)
Duplicate this NodeSet.
-
#each ⇒ Object
Iterate over each node, yielding to
block
. -
#empty? ⇒ Boolean
Is this NodeSet empty?.
-
#filter(expr) ⇒ Object
Filter this list for nodes that match
expr
. -
#first(n = nil) ⇒ Object
Get the first element of the NodeSet.
-
#include?(node) ⇒ Boolean
Returns true if any member of node set equals
node
. -
#index(node = nil) ⇒ Object
Returns the index of the first node in self that is == to
node
or meets the given block. -
#initialize(document, list = []) {|_self| ... } ⇒ NodeSet
constructor
Create a NodeSet with
document
defaulting tolist
. -
#inner_html(*args) ⇒ Object
Get the inner html of all contained Node objects.
-
#inner_text ⇒ Object
(also: #text)
Get the inner text of all contained Node objects.
-
#inspect ⇒ Object
Return a nicely formated string representation.
-
#last ⇒ Object
Get the last element of the NodeSet.
-
#length ⇒ Object
(also: #size)
Get the length of the node set.
-
#pop ⇒ Object
Removes the last element from set and returns it, or
nil
if the set is empty. -
#push(node) ⇒ Object
(also: #<<)
Append
node
to the NodeSet. -
#remove_attr(name) ⇒ Object
(also: #remove_attribute)
Remove the attributed named
name
from all Node objects in the NodeSet. -
#remove_class(name = nil) ⇒ Object
Remove the class attribute
name
from all Node objects in the NodeSet. -
#reverse ⇒ Object
Returns a new NodeSet containing all the nodes in the NodeSet in reverse order.
-
#shift ⇒ Object
Returns the first element of the NodeSet and removes it.
-
#slice(*args) ⇒ Object
- start, length
-
-> NodeSet or nil [range] -> NodeSet or nil slice(index) -> Node or nil slice(start, length) -> NodeSet or nil slice(range) -> NodeSet or nil.
-
#to_a ⇒ Object
(also: #to_ary)
Return this list as an Array.
-
#to_html(*args) ⇒ Object
Convert this NodeSet to HTML.
-
#to_s ⇒ Object
Convert this NodeSet to a string.
-
#to_xhtml(*args) ⇒ Object
Convert this NodeSet to XHTML.
-
#to_xml(*args) ⇒ Object
Convert this NodeSet to XML.
-
#unlink ⇒ Object
(also: #remove)
Unlink this NodeSet and all Node objects it contains from their current context.
-
#wrap(html) ⇒ Object
Wrap this NodeSet with
html
. -
#xpath(*args) ⇒ Object
call-seq: xpath *paths, [namespace-bindings, variable-bindings, custom-handler-class].
-
#|(node_set) ⇒ Object
(also: #+)
Returns a new set built by merging the set and the elements of the given set.
Constructor Details
#initialize(document, list = []) {|_self| ... } ⇒ NodeSet
Create a NodeSet with document
defaulting to list
18 19 20 21 22 23 |
# File 'lib/nokogiri/xml/node_set.rb', line 18 def initialize document, list = [] @document = document document.decorate(self) list.each { |x| self << x } yield self if block_given? end |
Instance Attribute Details
#document ⇒ Object
The Document this NodeSet is associated with
13 14 15 |
# File 'lib/nokogiri/xml/node_set.rb', line 13 def document @document end |
Instance Method Details
#&(node_set) ⇒ Object
Set Intersection — Returns a new NodeSet containing nodes common to the two NodeSets.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'ext/nokogiri/xml_node_set.c', line 136
static VALUE intersection(VALUE self, VALUE rb_other)
{
xmlNodeSetPtr node_set, other ;
xmlNodeSetPtr intersection;
if(!rb_obj_is_kind_of(rb_other, cNokogiriXmlNodeSet))
rb_raise(rb_eArgError, "node_set must be a Nokogiri::XML::NodeSet");
Data_Get_Struct(self, xmlNodeSet, node_set);
Data_Get_Struct(rb_other, xmlNodeSet, other);
intersection = xmlXPathIntersection(node_set, other);
return Nokogiri_wrap_xml_node_set(intersection, rb_iv_get(self, "@document"));
}
|
#-(node_set) ⇒ Object
Difference - returns a new NodeSet that is a copy of this NodeSet, removing
each item that also appears in +node_set+
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'ext/nokogiri/xml_node_set.c', line 203
static VALUE minus(VALUE self, VALUE rb_other)
{
xmlNodeSetPtr node_set, other;
xmlNodeSetPtr new;
int j ;
if(!rb_obj_is_kind_of(rb_other, cNokogiriXmlNodeSet))
rb_raise(rb_eArgError, "node_set must be a Nokogiri::XML::NodeSet");
Data_Get_Struct(self, xmlNodeSet, node_set);
Data_Get_Struct(rb_other, xmlNodeSet, other);
new = xmlXPathNodeSetMerge(NULL, node_set);
for (j = 0 ; j < other->nodeNr ; ++j) {
xpath_node_set_del(new, other->nodeTab[j]);
}
return Nokogiri_wrap_xml_node_set(new, rb_iv_get(self, "@document"));
}
|
#==(other) ⇒ Object
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
328 329 330 331 332 333 334 335 |
# File 'lib/nokogiri/xml/node_set.rb', line 328 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) ⇒ Object
Search this NodeSet's nodes' immediate children using CSS selector selector
106 107 108 109 |
# File 'lib/nokogiri/xml/node_set.rb', line 106 def > selector ns = document.root.namespaces xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first end |
#[](*args) ⇒ Object
- start, length
-
-> NodeSet or nil
- range
-
-> NodeSet or nil
slice(index) -> Node or nil
slice(start, length) -> NodeSet or nil
slice(range) -> NodeSet or nil
Element reference - returns the node at index
, or returns a NodeSet containing nodes starting at start
and continuing for length
elements, or returns a NodeSet containing nodes specified by range
. Negative indices
count backward from the end of the node_set
(-1 is the last node). Returns nil if the index
(or start
) are out of range.
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'ext/nokogiri/xml_node_set.c', line 276
static VALUE slice(int argc, VALUE *argv, VALUE self)
{
VALUE arg ;
long beg, len ;
xmlNodeSetPtr node_set;
Data_Get_Struct(self, xmlNodeSet, node_set);
if (argc == 2) {
beg = NUM2LONG(argv[0]);
len = NUM2LONG(argv[1]);
if (beg < 0) {
beg += node_set->nodeNr ;
}
return subseq(self, beg, len);
}
if (argc != 1) {
rb_scan_args(argc, argv, "11", NULL, NULL);
}
arg = argv[0];
if (FIXNUM_P(arg)) {
return index_at(self, FIX2LONG(arg));
}
/* if arg is Range */
switch (rb_range_beg_len(arg, &beg, &len, (long)node_set->nodeNr, 0)) {
case Qfalse:
break;
case Qnil:
return Qnil;
default:
return subseq(self, beg, len);
}
return index_at(self, NUM2LONG(arg));
}
|
#add_class(name) ⇒ Object
Add the class attribute name
to all Node objects in the NodeSet.
See Nokogiri::XML::Node#add_class for more information.
143 144 145 146 147 148 |
# File 'lib/nokogiri/xml/node_set.rb', line 143 def add_class name each do |el| el.add_class(name) end self end |
#after(datum) ⇒ Object
Insert datum
after the last Node in this NodeSet
66 67 68 |
# File 'lib/nokogiri/xml/node_set.rb', line 66 def after datum last.after datum end |
#append_class(name) ⇒ Object
Append the class attribute name
to all Node objects in the NodeSet.
See Nokogiri::XML::Node#append_class for more information.
155 156 157 158 159 160 |
# File 'lib/nokogiri/xml/node_set.rb', line 155 def append_class name each do |el| el.append_class(name) end self end |
#at(*args) ⇒ Object Also known as: %
call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
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]
123 124 125 126 127 128 129 |
# File 'lib/nokogiri/xml/node_set.rb', line 123 def at *args if args.length == 1 && args.first.is_a?(Numeric) return self[args.first] end super(*args) end |
#at_css(*args) ⇒ Object Originally defined in module Searchable
call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
Search this object for CSS rules
, and return only the first match. rules
must be one or more CSS selectors.
See Searchable#css for more information.
#at_xpath(*args) ⇒ Object Originally defined in module Searchable
call-seq: xpath *paths, [namespace-bindings, variable-bindings, custom-handler-class]
Search this node for XPath paths
, and return only the first match. paths
must be one or more XPath queries.
See Searchable#xpath for more information.
#attr(key, value = nil, &block) ⇒ Object Also known as: set, attribute
Set attributes on each Node in the NodeSet, or get an attribute from the first Node in the NodeSet.
To get an attribute from the first Node in a NodeSet:
node_set.attr("href") # => "https://www.nokogiri.org"
Note that an empty NodeSet will return nil when #attr
is called as a getter.
To set an attribute on each node, key
can either be an attribute name, or a Hash of attribute names and values. When called as a setter, #attr
returns the NodeSet.
If key
is an attribute name, then either value
or block
must be passed.
If key
is a Hash then attributes will be set for each key/value pair:
node_set.attr("href" => "https://www.nokogiri.org", "class" => "member")
If value
is passed, it will be used as the attribute value for all nodes:
node_set.attr("href", "https://www.nokogiri.org")
If block
is passed, it will be called on each Node object in the NodeSet and the return value used as the attribute value for that node:
node_set.attr("class") { |node| node.name }
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/nokogiri/xml/node_set.rb', line 207 def attr key, value = nil, &block unless key.is_a?(Hash) || (key && (value || block)) return first ? first.attribute(key) : nil end hash = key.is_a?(Hash) ? key : { key => value } hash.each do |k,v| each do |node| node[k] = v || block.call(node) end end self end |
#before(datum) ⇒ Object
Insert datum
before the first Node in this NodeSet
60 61 62 |
# File 'lib/nokogiri/xml/node_set.rb', line 60 def before datum first.before datum end |
#children ⇒ Object
Returns a new NodeSet containing all the children of all the nodes in the NodeSet
340 341 342 343 344 345 346 |
# File 'lib/nokogiri/xml/node_set.rb', line 340 def children node_set = NodeSet.new(document) each do |node| node.children.each { |n| node_set.push(n) } end node_set end |
#css(*args) ⇒ Object
call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
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
80 81 82 83 84 85 86 87 |
# File 'lib/nokogiri/xml/node_set.rb', line 80 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 |
#delete(node) ⇒ Object
Delete node
from the Nodeset, if it is a member. Returns the deleted node if found, otherwise returns nil.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'ext/nokogiri/xml_node_set.c', line 111
static VALUE
delete(VALUE self, VALUE rb_node)
{
xmlNodeSetPtr node_set;
xmlNodePtr node;
Check_Node_Set_Node_Type(rb_node);
Data_Get_Struct(self, xmlNodeSet, node_set);
Data_Get_Struct(rb_node, xmlNode, node);
if (xmlXPathNodeSetContains(node_set, node)) {
xpath_node_set_del(node_set, node);
return rb_node;
}
return Qnil ;
}
|
#dup ⇒ Object Also known as: clone
Duplicate this NodeSet. Note that the Nodes contained in the NodeSet are not duplicated (similar to how Array and other Enumerable classes work).
56 57 58 59 60 61 62 63 64 65 66 |
# File 'ext/nokogiri/xml_node_set.c', line 56
static VALUE duplicate(VALUE self)
{
xmlNodeSetPtr node_set;
xmlNodeSetPtr dupl;
Data_Get_Struct(self, xmlNodeSet, node_set);
dupl = xmlXPathNodeSetMerge(NULL, node_set);
return Nokogiri_wrap_xml_node_set(dupl, rb_iv_get(self, "@document"));
}
|
#each ⇒ Object
Iterate over each node, yielding to block
235 236 237 238 239 240 241 242 |
# File 'lib/nokogiri/xml/node_set.rb', line 235 def each return to_enum unless block_given? 0.upto(length - 1) do |x| yield self[x] end self end |
#empty? ⇒ Boolean
Is this NodeSet empty?
42 43 44 |
# File 'lib/nokogiri/xml/node_set.rb', line 42 def empty? length == 0 end |
#filter(expr) ⇒ Object
Filter this list for nodes that match expr
134 135 136 |
# File 'lib/nokogiri/xml/node_set.rb', line 134 def filter expr find_all { |node| node.matches?(expr) } end |
#first(n = nil) ⇒ Object
Get the first element of the NodeSet.
27 28 29 30 31 32 |
# File 'lib/nokogiri/xml/node_set.rb', line 27 def first n = nil return self[0] unless n list = [] [n, length].min.times { |i| list << self[i] } list end |
#include?(node) ⇒ Boolean
Returns true if any member of node set equals node
.
158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'ext/nokogiri/xml_node_set.c', line 158
static VALUE include_eh(VALUE self, VALUE rb_node)
{
xmlNodeSetPtr node_set;
xmlNodePtr node;
Check_Node_Set_Node_Type(rb_node);
Data_Get_Struct(self, xmlNodeSet, node_set);
Data_Get_Struct(rb_node, xmlNode, node);
return (xmlXPathNodeSetContains(node_set, node) ? Qtrue : Qfalse);
}
|
#index(node = nil) ⇒ Object
Returns the index of the first node in self that is == to node
or meets the given block. Returns nil if no match is found.
48 49 50 51 52 53 54 55 56 |
# File 'lib/nokogiri/xml/node_set.rb', line 48 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 |
#inner_html(*args) ⇒ Object
Get the inner html of all contained Node objects
264 265 266 |
# File 'lib/nokogiri/xml/node_set.rb', line 264 def inner_html *args collect{|j| j.inner_html(*args) }.join('') end |
#inner_text ⇒ Object Also known as: text
Get the inner text of all contained Node objects
Note: This joins the text of all Node objects in the NodeSet:
doc = Nokogiri::XML('<xml><a><d>foo</d><d>bar</d></a></xml>')
doc.css('d').text # => "foobar"
Instead, if you want to return the text of all nodes in the NodeSet:
doc.css('d').map(&:text) # => ["foo", "bar"]
See Nokogiri::XML::Node#content for more information.
257 258 259 |
# File 'lib/nokogiri/xml/node_set.rb', line 257 def inner_text collect(&:inner_text).join('') end |
#inspect ⇒ Object
Return a nicely formated string representation
361 362 363 |
# File 'lib/nokogiri/xml/node_set.rb', line 361 def inspect "[#{map(&:inspect).join ', '}]" end |
#last ⇒ Object
Get the last element of the NodeSet.
36 37 38 |
# File 'lib/nokogiri/xml/node_set.rb', line 36 def last self[-1] end |
#length ⇒ Object Also known as: size
Get the length of the node set
74 75 76 77 78 79 80 81 |
# File 'ext/nokogiri/xml_node_set.c', line 74
static VALUE length(VALUE self)
{
xmlNodeSetPtr node_set;
Data_Get_Struct(self, xmlNodeSet, node_set);
return node_set ? INT2NUM(node_set->nodeNr) : INT2NUM(0);
}
|
#pop ⇒ Object
Removes the last element from set and returns it, or nil
if the set is empty
311 312 313 314 |
# File 'lib/nokogiri/xml/node_set.rb', line 311 def pop return nil if length == 0 delete last end |
#push(node) ⇒ Object Also known as: <<
Append node
to the NodeSet.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'ext/nokogiri/xml_node_set.c', line 89
static VALUE push(VALUE self, VALUE rb_node)
{
xmlNodeSetPtr node_set;
xmlNodePtr node;
Check_Node_Set_Node_Type(rb_node);
Data_Get_Struct(self, xmlNodeSet, node_set);
Data_Get_Struct(rb_node, xmlNode, node);
xmlXPathNodeSetAdd(node_set, node);
return self;
}
|
#remove_attr(name) ⇒ Object Also known as: remove_attribute
Remove the attributed named name
from all Node objects in the NodeSet
227 228 229 230 |
# File 'lib/nokogiri/xml/node_set.rb', line 227 def remove_attr name each { |el| el.delete name } self end |
#remove_class(name = nil) ⇒ Object
Remove the class attribute name
from all Node objects in the NodeSet.
See Nokogiri::XML::Node#remove_class for more information.
167 168 169 170 171 172 |
# File 'lib/nokogiri/xml/node_set.rb', line 167 def remove_class name = nil each do |el| el.remove_class(name) end self end |
#reverse ⇒ Object
Returns a new NodeSet containing all the nodes in the NodeSet in reverse order
351 352 353 354 355 356 357 |
# File 'lib/nokogiri/xml/node_set.rb', line 351 def reverse node_set = NodeSet.new(document) (length - 1).downto(0) do |x| node_set.push self[x] end node_set end |
#search(*args) ⇒ Object Also known as: / Originally defined in module Searchable
call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
Search this object for paths
. paths
must be one or more XPath or CSS queries:
node.search("div.employee", ".//title")
A hash of namespace bindings may be appended:
node.search('.//bike:tire', {'bike' => 'http://schwinn.com/'})
node.search('bike|tire', {'bike' => 'http://schwinn.com/'})
For XPath queries, a hash of variable bindings may also be appended to the namespace bindings. For example:
node.search('.//address[@domestic=$value]', nil, {:value => 'Yes'})
Custom XPath functions and CSS pseudo-selectors may also be defined. To define custom functions create a class and implement the function you want to define. The first argument to the method will be the current matching NodeSet. Any other arguments are ones that you pass in. Note that this class may appear anywhere in the argument list. For example:
node.search('.//title[regex(., "\w+")]', 'div.employee:regex("[0-9]+")'
Class.new {
def regex node_set, regex
node_set.find_all { |node| node['some_attribute'] =~ /#{regex}/ }
end
}.new
)
See Searchable#xpath and Searchable#css for further usage help.
#shift ⇒ Object
Returns the first element of the NodeSet and removes it. Returns nil
if the set is empty.
319 320 321 322 |
# File 'lib/nokogiri/xml/node_set.rb', line 319 def shift return nil if length == 0 delete first end |
#slice(*args) ⇒ Object
- start, length
-
-> NodeSet or nil
- range
-
-> NodeSet or nil
slice(index) -> Node or nil
slice(start, length) -> NodeSet or nil
slice(range) -> NodeSet or nil
Element reference - returns the node at index
, or returns a NodeSet containing nodes starting at start
and continuing for length
elements, or returns a NodeSet containing nodes specified by range
. Negative indices
count backward from the end of the node_set
(-1 is the last node). Returns nil if the index
(or start
) are out of range.
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'ext/nokogiri/xml_node_set.c', line 276
static VALUE slice(int argc, VALUE *argv, VALUE self)
{
VALUE arg ;
long beg, len ;
xmlNodeSetPtr node_set;
Data_Get_Struct(self, xmlNodeSet, node_set);
if (argc == 2) {
beg = NUM2LONG(argv[0]);
len = NUM2LONG(argv[1]);
if (beg < 0) {
beg += node_set->nodeNr ;
}
return subseq(self, beg, len);
}
if (argc != 1) {
rb_scan_args(argc, argv, "11", NULL, NULL);
}
arg = argv[0];
if (FIXNUM_P(arg)) {
return index_at(self, FIX2LONG(arg));
}
/* if arg is Range */
switch (rb_range_beg_len(arg, &beg, &len, (long)node_set->nodeNr, 0)) {
case Qfalse:
break;
case Qnil:
return Qnil;
default:
return subseq(self, beg, len);
}
return index_at(self, NUM2LONG(arg));
}
|
#to_a ⇒ Object Also known as: to_ary
Return this list as an Array
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'ext/nokogiri/xml_node_set.c', line 322
static VALUE to_array(VALUE self)
{
xmlNodeSetPtr node_set ;
VALUE list;
int i;
Data_Get_Struct(self, xmlNodeSet, node_set);
list = rb_ary_new2(node_set->nodeNr);
for(i = 0; i < node_set->nodeNr; i++) {
VALUE elt = Nokogiri_wrap_xml_node_set_node(node_set->nodeTab[i], self);
rb_ary_push( list, elt );
}
return list;
}
|
#to_html(*args) ⇒ Object
Convert this NodeSet to HTML
282 283 284 285 286 287 288 289 290 291 |
# File 'lib/nokogiri/xml/node_set.rb', line 282 def to_html *args if Nokogiri.jruby? = args.first.is_a?(Hash) ? args.shift : {} if ![:save_with] [:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML end args.insert(0, ) end map { |x| x.to_html(*args) }.join end |
#to_s ⇒ Object
Convert this NodeSet to a string.
276 277 278 |
# File 'lib/nokogiri/xml/node_set.rb', line 276 def to_s map(&:to_s).join end |
#to_xhtml(*args) ⇒ Object
Convert this NodeSet to XHTML
295 296 297 |
# File 'lib/nokogiri/xml/node_set.rb', line 295 def to_xhtml *args map { |x| x.to_xhtml(*args) }.join end |
#to_xml(*args) ⇒ Object
Convert this NodeSet to XML
301 302 303 |
# File 'lib/nokogiri/xml/node_set.rb', line 301 def to_xml *args map { |x| x.to_xml(*args) }.join end |
#unlink ⇒ Object Also known as: remove
Unlink this NodeSet and all Node objects it contains from their current context.
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'ext/nokogiri/xml_node_set.c', line 345
static VALUE unlink_nodeset(VALUE self)
{
xmlNodeSetPtr node_set;
int j, nodeNr ;
Data_Get_Struct(self, xmlNodeSet, node_set);
nodeNr = node_set->nodeNr ;
for (j = 0 ; j < nodeNr ; j++) {
if (! NOKOGIRI_NAMESPACE_EH(node_set->nodeTab[j])) {
VALUE node ;
xmlNodePtr node_ptr;
node = Nokogiri_wrap_xml_node(Qnil, node_set->nodeTab[j]);
rb_funcall(node, rb_intern("unlink"), 0); /* modifies the C struct out from under the object */
Data_Get_Struct(node, xmlNode, node_ptr);
node_set->nodeTab[j] = node_ptr ;
}
}
return self ;
}
|
#wrap(html) ⇒ Object
Wrap this NodeSet with html
270 271 272 |
# File 'lib/nokogiri/xml/node_set.rb', line 270 def wrap html map { |node| node.wrap html } end |
#xpath(*args) ⇒ Object
call-seq: xpath *paths, [namespace-bindings, variable-bindings, custom-handler-class]
Search this node set for XPath paths
. paths
must be one or more XPath queries.
For more information see Nokogiri::XML::Searchable#xpath
96 97 98 99 100 101 102 |
# File 'lib/nokogiri/xml/node_set.rb', line 96 def xpath *args paths, handler, ns, binds = extract_params(args) inject(NodeSet.new(document)) do |set, node| set + xpath_internal(node, paths, handler, ns, binds) end end |
#|(node_set) ⇒ Object Also known as: +
Returns a new set built by merging the set and the elements of the given set.
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'ext/nokogiri/xml_node_set.c', line 179
static VALUE set_union(VALUE self, VALUE rb_other)
{
xmlNodeSetPtr node_set, other;
xmlNodeSetPtr new;
if(!rb_obj_is_kind_of(rb_other, cNokogiriXmlNodeSet))
rb_raise(rb_eArgError, "node_set must be a Nokogiri::XML::NodeSet");
Data_Get_Struct(self, xmlNodeSet, node_set);
Data_Get_Struct(rb_other, xmlNodeSet, other);
new = xmlXPathNodeSetMerge(NULL, node_set);
new = xmlXPathNodeSetMerge(new, other);
return Nokogiri_wrap_xml_node_set(new, rb_iv_get(self, "@document"));
}
|