Class: LibXML::XML::XPath::Object

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
ext/libxml/ruby_xml_xpath_object.c,
ext/libxml/ruby_xml_xpath_object.c

Overview

A collection of nodes returned from the evaluation of an XML::XPath or XML::XPointer expression.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#contextObject (readonly)

Instance Method Details

#[](aref) ⇒ Object

xpath_object -> node

array index into set of nodes



245
246
247
248
249
250
251
252
253
254
# File 'ext/libxml/ruby_xml_xpath_object.c', line 245

static VALUE rxml_xpath_object_aref(VALUE self, VALUE aref)
{
  rxml_xpath_object *rxpopp;

  if (rxml_xpath_object_empty_q(self) == Qtrue)
    return Qnil;

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  return rxml_xpath_object_tabref(rxpopp->xpop, NUM2INT(aref));
}

#debugObject

Dump libxml debugging information to stdout. Requires Libxml be compiled with debugging enabled.



324
325
326
327
328
329
330
331
332
333
334
335
# File 'ext/libxml/ruby_xml_xpath_object.c', line 324

static VALUE rxml_xpath_object_debug(VALUE self)
{
#ifdef LIBXML_DEBUG_ENABLED
  rxml_xpath_object *rxpopp;
  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  xmlXPathDebugDumpObject(stdout, rxpopp->xpop, 0);
  return Qtrue;
#else
  rb_warn("libxml was compiled without debugging support.");
  return Qfalse;
#endif
}

#each {|node| ... } ⇒ self

Call the supplied block for each node in this set.

Yields:

  • (node)

Returns:

  • (self)


188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# File 'ext/libxml/ruby_xml_xpath_object.c', line 188

static VALUE rxml_xpath_object_each(VALUE self)
{
  rxml_xpath_object *rxpopp;
  int i;

  if (rxml_xpath_object_empty_q(self) == Qtrue)
    return Qnil;

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);

  for (i = 0; i < rxpopp->xpop->nodesetval->nodeNr; i++)
  {
    rb_yield(rxml_xpath_object_tabref(rxpopp->xpop, i));
  }
  return (self);
}

#empty?Boolean

Determine whether this nodeset is empty (contains no nodes).

Returns:

  • (Boolean)


170
171
172
173
174
175
176
177
178
179
180
# File 'ext/libxml/ruby_xml_xpath_object.c', line 170

static VALUE rxml_xpath_object_empty_q(VALUE self)
{
  rxml_xpath_object *rxpopp;
  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);

  if (rxpopp->xpop->type != XPATH_NODESET)
    return Qnil;

  return (rxpopp->xpop->nodesetval == NULL || rxpopp->xpop->nodesetval->nodeNr <= 0) ? Qtrue
      : Qfalse;
}

#firstObject

Returns the first node in this node set, or nil if none exist.



211
212
213
214
215
216
217
218
219
220
# File 'ext/libxml/ruby_xml_xpath_object.c', line 211

static VALUE rxml_xpath_object_first(VALUE self)
{
  rxml_xpath_object *rxpopp;

  if (rxml_xpath_object_empty_q(self) == Qtrue)
    return Qnil;

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  return rxml_xpath_object_tabref(rxpopp->xpop, 0);
}

#lastObject

Returns the last node in this node set, or nil if none exist.



228
229
230
231
232
233
234
235
236
237
# File 'ext/libxml/ruby_xml_xpath_object.c', line 228

static VALUE rxml_xpath_object_last(VALUE self)
{
  rxml_xpath_object *rxpopp;

  if (rxml_xpath_object_empty_q(self) == Qtrue)
    return Qnil;

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  return rxml_xpath_object_tabref(rxpopp->xpop, -1);
}

#lengthNumeric Also known as: size

Obtain the length of the nodesetval node list.

Returns:

  • (Numeric)


262
263
264
265
266
267
268
269
270
271
# File 'ext/libxml/ruby_xml_xpath_object.c', line 262

static VALUE rxml_xpath_object_length(VALUE self)
{
  rxml_xpath_object *rxpopp;

  if (rxml_xpath_object_empty_q(self) == Qtrue)
    return INT2FIX(0);

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  return INT2NUM(rxpopp->xpop->nodesetval->nodeNr);
}

#stringString

Returns the original XPath expression as a string.

Returns:

  • (String)


305
306
307
308
309
310
311
312
313
314
315
# File 'ext/libxml/ruby_xml_xpath_object.c', line 305

static VALUE rxml_xpath_object_string(VALUE self)
{
  rxml_xpath_object *rxpopp;

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);

  if (rxpopp->xpop->stringval == NULL)
    return Qnil;

  return rxml_new_cstr( rxpopp->xpop->stringval, rxpopp->xdoc->encoding);
}

#to_aArray

Obtain an array of the nodes in this set.

Returns:

  • (Array)


140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'ext/libxml/ruby_xml_xpath_object.c', line 140

static VALUE rxml_xpath_object_to_a(VALUE self)
{
  VALUE set_ary, nodeobj;
  rxml_xpath_object *rxpopp;
  xmlXPathObjectPtr xpop;
  int i;

  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  xpop = rxpopp->xpop;

  set_ary = rb_ary_new();

  if (!((xpop->nodesetval == NULL) || (xpop->nodesetval->nodeNr == 0)))
  {
    for (i = 0; i < xpop->nodesetval->nodeNr; i++)
    {
      nodeobj = rxml_xpath_object_tabref(xpop, i);
      rb_ary_push(set_ary, nodeobj);
    }
  }

  return (set_ary);
}

#xpath_typeInteger

Returns the XPath type of the result object. Possible values are defined as constants on the XML::XPath class and include:

  • XML::XPath::UNDEFINED

  • XML::XPath::NODESET

  • XML::XPath::BOOLEAN

  • XML::XPath::NUMBER

  • XML::XPath::STRING

  • XML::XPath::POINT

  • XML::XPath::RANGE

  • XML::XPath::LOCATIONSET

  • XML::XPath::USERS

  • XML::XPath::XSLT_TREE

Returns:

  • (Integer)


292
293
294
295
296
297
# File 'ext/libxml/ruby_xml_xpath_object.c', line 292

static VALUE rxml_xpath_object_get_type(VALUE self)
{
  rxml_xpath_object *rxpopp;
  TypedData_Get_Struct(self, rxml_xpath_object, &rxml_xpath_object_data_type, rxpopp);
  return INT2FIX(rxpopp->xpop->type);
}