/*
 * call-seq:
 *   get(attribute)
 *
 * Get the value for +attribute+
 */
static VALUE get(VALUE self, VALUE rattribute)
{
  xmlNodePtr node;
  xmlChar* value = 0;
  VALUE rvalue ;
  char* attribute = 0;
  char *colon = 0, *attr_name = 0, *prefix = 0;
  xmlNsPtr ns;

  if (NIL_P(rattribute)) return Qnil;

  Data_Get_Struct(self, xmlNode, node);
  attribute = strdup(StringValuePtr(rattribute));

  colon = strchr(attribute, ':');
  if (colon) {
    (*colon) = 0 ; /* create two null-terminated strings of the prefix and attribute name */
    prefix = attribute ;
    attr_name = colon + 1 ;
    ns = xmlSearchNs(node->doc, node, (const xmlChar *)(prefix));
    if (ns) {
      value = xmlGetNsProp(node, (xmlChar*)(attr_name), ns->href);
    }
  } else {
    value = xmlGetNoNsProp(node, (xmlChar*)attribute);
  }

  free(attribute);
  if (!value) return Qnil;

  rvalue = NOKOGIRI_STR_NEW2(value);
  xmlFree(value);

  return rvalue ;
}