Class: Nokogiri::XML::NodeSet
- Inherits:
-
Object
- Object
- Nokogiri::XML::NodeSet
- Includes:
- Enumerable
- 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::Node#css or Nokogiri::XML::Node#xpath
Instance Attribute Summary collapse
-
#document ⇒ Object
The Document this NodeSet is associated with.
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
Append the class attribute
name
to all Node objects in the NodeSet. -
#after(datum) ⇒ Object
Insert
datum
after the last Node in this NodeSet. -
#at(path, ns = document.root ? document.root.namespaces : {}) ⇒ Object
(also: #%)
If path is a string, search this document for
path
returning the first Node. -
#at_css(*rules) ⇒ Object
Search this NodeSet for the first occurrence of CSS
rules
. -
#at_xpath(*paths) ⇒ Object
Search this NodeSet for the first occurrence of XPath
paths
. -
#attr(key, value = nil, &blk) ⇒ Object
(also: #set, #attribute)
Set the attribute
key
tovalue
or the return value ofblk
on all Node objects 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(*paths) ⇒ Object
Search this NodeSet for css
paths
. -
#delete(node) ⇒ Object
Delete
node
from the Nodeset, if it is a member. -
#dup ⇒ Object
Duplicate this node set.
-
#each(&block) ⇒ 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) ⇒ Object
Returns the index of the first node in self that is == to
node
. -
#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
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.
-
#search(*paths) ⇒ Object
(also: #/)
Search this document for
paths
. -
#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, &blk) ⇒ Object
Wrap this NodeSet with
html
or the results of the builder inblk
. -
#xpath(*paths) ⇒ Object
Search this NodeSet for XPath
paths
. -
#|(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
14 15 16 17 18 19 |
# 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 |
Instance Attribute Details
#document ⇒ Object
The Document this NodeSet is associated with
11 12 13 |
# File 'lib/nokogiri/xml/node_set.rb', line 11 def document @document end |
Instance Method Details
#&(node_set) ⇒ Object
Set Intersection — Returns a new NodeSet containing nodes common to the two NodeSets.
163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'ext/nokogiri/xml_node_set.c', line 163
static VALUE intersection(VALUE self, VALUE rb_other)
{
nokogiriNodeSetTuple *tuple, *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, nokogiriNodeSetTuple, tuple);
Data_Get_Struct(rb_other, nokogiriNodeSetTuple, other);
intersection = xmlXPathIntersection(tuple->node_set, other->node_set);
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+
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'ext/nokogiri/xml_node_set.c', line 231
static VALUE minus(VALUE self, VALUE rb_other)
{
nokogiriNodeSetTuple *tuple, *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, nokogiriNodeSetTuple, tuple);
Data_Get_Struct(rb_other, nokogiriNodeSetTuple, other);
new = xmlXPathNodeSetMerge(NULL, tuple->node_set);
for (j = 0 ; j < other->node_set->nodeNr ; ++j) {
xmlXPathNodeSetDel(new, other->node_set->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
321 322 323 324 325 326 327 328 |
# 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) ⇒ Object
Search this NodeSet’s nodes’ immediate children using CSS selector selector
143 144 145 146 |
# 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 |
#[](*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.
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 |
# File 'ext/nokogiri/xml_node_set.c', line 310
static VALUE slice(int argc, VALUE *argv, VALUE self)
{
VALUE arg ;
long beg, len ;
xmlNodeSetPtr node_set;
nokogiriNodeSetTuple *tuple;
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
node_set = tuple->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
Append the class attribute name
to all Node objects in the NodeSet.
183 184 185 186 187 188 189 |
# 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) ⇒ Object
Insert datum
after the last Node in this NodeSet
59 60 61 |
# File 'lib/nokogiri/xml/node_set.rb', line 59 def after datum last.after datum end |
#at(path, ns = document.root ? document.root.namespaces : {}) ⇒ Object Also known as: %
If path is a string, search this document for path
returning the first Node. Otherwise, index in to the array with path
.
151 152 153 154 |
# 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 |
#at_css(*rules) ⇒ Object
Search this NodeSet for the first occurrence of CSS rules
. Equivalent to css(rules).first
See NodeSet#css for more information.
171 172 173 |
# File 'lib/nokogiri/xml/node_set.rb', line 171 def at_css *rules css(*rules).first end |
#at_xpath(*paths) ⇒ Object
Search this NodeSet for the first occurrence of XPath paths
. Equivalent to xpath(paths).first
See NodeSet#xpath for more information.
162 163 164 |
# File 'lib/nokogiri/xml/node_set.rb', line 162 def at_xpath *paths xpath(*paths).first end |
#attr(key, value = nil, &blk) ⇒ Object Also known as: set, attribute
Set the attribute key
to value
or the return value of blk
on all Node objects in the NodeSet.
214 215 216 217 218 219 220 221 222 223 224 |
# 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 |
#before(datum) ⇒ Object
Insert datum
before the first Node in this NodeSet
53 54 55 |
# File 'lib/nokogiri/xml/node_set.rb', line 53 def before datum first.before datum end |
#children ⇒ Object
Returns a new NodeSet containing all the children of all the nodes in the NodeSet
333 334 335 |
# File 'lib/nokogiri/xml/node_set.rb', line 333 def children inject(NodeSet.new(document)) { |set, node| set += node.children } end |
#css(*paths) ⇒ Object
Search this NodeSet for css paths
For more information see Nokogiri::XML::Node#css
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# 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 |
#delete(node) ⇒ Object
Delete node
from the Nodeset, if it is a member. Returns the deleted node if found, otherwise returns nil.
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'ext/nokogiri/xml_node_set.c', line 128
static VALUE
delete(VALUE self, VALUE rb_node)
{
nokogiriNodeSetTuple *tuple;
xmlNodePtr node;
xmlNodeSetPtr cur;
int i;
if (!(rb_obj_is_kind_of(rb_node, cNokogiriXmlNode) || rb_obj_is_kind_of(rb_node, cNokogiriXmlNamespace)))
rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node or Nokogiri::XML::Namespace");
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
Data_Get_Struct(rb_node, xmlNode, node);
cur = tuple->node_set;
if (xmlXPathNodeSetContains(cur, node)) {
for (i = 0; i < cur->nodeNr; i++)
if (cur->nodeTab[i] == node) break;
cur->nodeNr--;
for (;i < cur->nodeNr;i++)
cur->nodeTab[i] = cur->nodeTab[i + 1];
cur->nodeTab[cur->nodeNr] = NULL;
return rb_node;
}
return Qnil ;
}
|
#dup ⇒ Object
Duplicate this node set
75 76 77 78 79 80 81 82 83 84 85 |
# File 'ext/nokogiri/xml_node_set.c', line 75
static VALUE duplicate(VALUE self)
{
nokogiriNodeSetTuple *tuple;
xmlNodeSetPtr dupl;
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
dupl = xmlXPathNodeSetMerge(NULL, tuple->node_set);
return Nokogiri_wrap_xml_node_set(dupl, rb_iv_get(self, "@document"));
}
|
#each(&block) ⇒ Object
Iterate over each node, yielding to block
237 238 239 240 241 |
# File 'lib/nokogiri/xml/node_set.rb', line 237 def each(&block) 0.upto(length - 1) do |x| yield self[x] end end |
#empty? ⇒ Boolean
Is this NodeSet empty?
40 41 42 |
# File 'lib/nokogiri/xml/node_set.rb', line 40 def empty? length == 0 end |
#filter(expr) ⇒ Object
Filter this list for nodes that match expr
177 178 179 |
# File 'lib/nokogiri/xml/node_set.rb', line 177 def filter expr find_all { |node| node.matches?(expr) } end |
#first(n = nil) ⇒ Object
Get the first element of the NodeSet.
23 24 25 26 27 28 29 30 |
# 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 |
#include?(node) ⇒ Boolean
Returns true if any member of node set equals node
.
185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'ext/nokogiri/xml_node_set.c', line 185
static VALUE include_eh(VALUE self, VALUE rb_node)
{
nokogiriNodeSetTuple *tuple;
xmlNodePtr node;
if(!(rb_obj_is_kind_of(rb_node, cNokogiriXmlNode) || rb_obj_is_kind_of(rb_node, cNokogiriXmlNamespace)))
rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node or Nokogiri::XML::Namespace");
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
Data_Get_Struct(rb_node, xmlNode, node);
return (xmlXPathNodeSetContains(tuple->node_set, node) ? Qtrue : Qfalse);
}
|
#index(node) ⇒ Object
Returns the index of the first node in self that is == to node
. Returns nil if no match is found.
46 47 48 49 |
# 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) ⇒ Object
Get the inner html of all contained Node objects
252 253 254 |
# File 'lib/nokogiri/xml/node_set.rb', line 252 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
245 246 247 |
# File 'lib/nokogiri/xml/node_set.rb', line 245 def inner_text collect{|j| j.inner_text}.join('') end |
#inspect ⇒ Object
Return a nicely formated string representation
350 351 352 |
# File 'lib/nokogiri/xml/node_set.rb', line 350 def inspect "[#{map { |c| c.inspect }.join ', '}]" end |
#last ⇒ Object
Get the last element of the NodeSet.
34 35 36 |
# File 'lib/nokogiri/xml/node_set.rb', line 34 def last self[length - 1] end |
#length ⇒ Object Also known as: size
Get the length of the node set
93 94 95 96 97 98 99 |
# File 'ext/nokogiri/xml_node_set.c', line 93
static VALUE length(VALUE self)
{
nokogiriNodeSetTuple *tuple;
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
return tuple->node_set ? INT2NUM(tuple->node_set->nodeNr) : INT2NUM(0);
}
|
#pop ⇒ Object
Removes the last element from set and returns it, or nil
if the set is empty
304 305 306 307 |
# File 'lib/nokogiri/xml/node_set.rb', line 304 def pop return nil if length == 0 delete last end |
#push(node) ⇒ Object Also known as: <<
Append node
to the NodeSet.
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'ext/nokogiri/xml_node_set.c', line 107
static VALUE push(VALUE self, VALUE rb_node)
{
nokogiriNodeSetTuple *tuple;
xmlNodePtr node;
if(!(rb_obj_is_kind_of(rb_node, cNokogiriXmlNode) || rb_obj_is_kind_of(rb_node, cNokogiriXmlNamespace)))
rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node or Nokogiri::XML::Namespace");
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
Data_Get_Struct(rb_node, xmlNode, node);
xmlXPathNodeSetAdd(tuple->node_set, node);
return self;
}
|
#remove_attr(name) ⇒ Object
Remove the attributed named name
from all Node objects in the NodeSet
230 231 232 233 |
# File 'lib/nokogiri/xml/node_set.rb', line 230 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. If name
is nil, remove the class attribute from all Nodes in the NodeSet.
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
# 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 ⇒ Object
Returns a new NodeSet containing all the nodes in the NodeSet in reverse order
340 341 342 343 344 345 346 |
# 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) ⇒ Object Also known as: /
Search this document for paths
For more information see Nokogiri::XML::Node#css and Nokogiri::XML::Node#xpath
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# 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 |
#shift ⇒ Object
Returns the first element of the NodeSet and removes it. Returns nil
if the set is empty.
312 313 314 315 |
# File 'lib/nokogiri/xml/node_set.rb', line 312 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.
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 |
# File 'ext/nokogiri/xml_node_set.c', line 310
static VALUE slice(int argc, VALUE *argv, VALUE self)
{
VALUE arg ;
long beg, len ;
xmlNodeSetPtr node_set;
nokogiriNodeSetTuple *tuple;
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
node_set = tuple->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
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 |
# File 'ext/nokogiri/xml_node_set.c', line 357
static VALUE to_array(VALUE self, VALUE rb_node)
{
xmlNodeSetPtr set;
VALUE *elts;
VALUE list;
int i;
nokogiriNodeSetTuple *tuple;
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
set = tuple->node_set;
elts = calloc((size_t)set->nodeNr, sizeof(VALUE *));
for(i = 0; i < set->nodeNr; i++) {
if (XML_NAMESPACE_DECL == set->nodeTab[i]->type)
elts[i] = Nokogiri_wrap_xml_namespace2(rb_iv_get(self, "@document"), (xmlNsPtr)(set->nodeTab[i]));
else
elts[i] = Nokogiri_wrap_xml_node(Qnil, set->nodeTab[i]);
}
list = rb_ary_new4((long)set->nodeNr, elts);
/*free(elts); */
return list;
}
|
#to_html(*args) ⇒ Object
Convert this NodeSet to HTML
275 276 277 278 279 280 281 282 283 284 |
# File 'lib/nokogiri/xml/node_set.rb', line 275 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.
269 270 271 |
# File 'lib/nokogiri/xml/node_set.rb', line 269 def to_s map { |x| x.to_s }.join end |
#to_xhtml(*args) ⇒ Object
Convert this NodeSet to XHTML
288 289 290 |
# File 'lib/nokogiri/xml/node_set.rb', line 288 def to_xhtml *args map { |x| x.to_xhtml(*args) }.join end |
#to_xml(*args) ⇒ Object
Convert this NodeSet to XML
294 295 296 |
# File 'lib/nokogiri/xml/node_set.rb', line 294 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.
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
# File 'ext/nokogiri/xml_node_set.c', line 389
static VALUE unlink_nodeset(VALUE self)
{
xmlNodeSetPtr node_set;
int j, nodeNr ;
nokogiriNodeSetTuple *tuple;
Data_Get_Struct(self, nokogiriNodeSetTuple, tuple);
node_set = tuple->node_set;
nodeNr = node_set->nodeNr ;
for (j = 0 ; j < nodeNr ; j++) {
if (XML_NAMESPACE_DECL != node_set->nodeTab[j]->type) {
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, &blk) ⇒ Object
Wrap this NodeSet with html
or the results of the builder in blk
258 259 260 261 262 263 264 265 |
# 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) ⇒ Object
Search this NodeSet for XPath paths
For more information see Nokogiri::XML::Node#xpath
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# 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 |
#|(node_set) ⇒ Object Also known as: +
Returns a new set built by merging the set and the elements of the given set.
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'ext/nokogiri/xml_node_set.c', line 207
static VALUE set_union(VALUE self, VALUE rb_other)
{
nokogiriNodeSetTuple *tuple, *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, nokogiriNodeSetTuple, tuple);
Data_Get_Struct(rb_other, nokogiriNodeSetTuple, other);
new = xmlXPathNodeSetMerge(NULL, tuple->node_set);
new = xmlXPathNodeSetMerge(new, other->node_set);
return Nokogiri_wrap_xml_node_set(new, rb_iv_get(self, "@document"));
}
|