Class: LibXML::XML::XPath::Object
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Instance Chain:
self,
Enumerable
|
|
| Inherits: | Object |
| 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 ::LibXML::XML::XPath or XML::XPointer expression.
Instance Attribute Summary
- #context readonly
-
#empty? ⇒ Boolean
readonly
Determine whether this nodeset is empty (contains no nodes).
Instance Method Summary
-
#[](i) ⇒ node
array index into set of nodes.
-
#debug ⇒ Boolean
Dump libxml debugging information to stdout.
-
#each {|node| ... } ⇒ self
Call the supplied block for each node in this set.
-
#first ⇒ node
Returns the first node in this node set, or nil if none exist.
-
#last ⇒ node
Returns the last node in this node set, or nil if none exist.
-
#length ⇒ Numeric
(also: #size)
Obtain the length of the nodesetval node list.
-
#size ⇒ Numeric
Alias for #length.
-
#string ⇒ String
Returns the original
::LibXML::XML::XPathexpression as a string. -
#to_a ⇒ Array, ...
Obtain an array of the nodes in this set.
-
#xpath_type ⇒ Integer
Returns the
::LibXML::XML::XPathtype of the result object.
Instance Attribute Details
#context (readonly)
[ GitHub ]
#empty? ⇒ Boolean (readonly)
Determine whether this nodeset is empty (contains no nodes).
# 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;
}
Instance Method Details
#[](i) ⇒ node
array index into set of nodes
# 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));
}
#debug ⇒ Boolean
Dump libxml debugging information to stdout. Requires Libxml be compiled with debugging enabled.
# 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.
# 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);
}
#first ⇒ node
Returns the first node in this node set, or nil if none exist.
# 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);
}
#last ⇒ node
Returns the last node in this node set, or nil if none exist.
# 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);
}
#length ⇒ Numeric Also known as: #size
Obtain the length of the nodesetval node list.
# 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);
}
#length ⇒ Numeric
#size ⇒ Numeric
Numeric
#size ⇒ Numeric
Alias for #length.
#string ⇒ String
Returns the original ::LibXML::XML::XPath expression as a string.
# 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_a ⇒ Array, ...
Obtain an array of the nodes in this set.
# 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_type ⇒ Integer
Returns the ::LibXML::XML::XPath type of the result object. Possible values are defined as constants on the ::LibXML::XML::XPath class and include:
# 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);
}