static void print_names(xmlNode *node)
{
  xmlNode *cur_node = NULL;
  for (cur_node = node; cur_node; cur_node = cur_node->next) {
    if (cur_node->type == XML_ELEMENT_NODE) {
      if ( strcmp(cur_node->name, ) == 0 ) {
	xmlAttr *prop = NULL;
	if ( (prop = xmlHasProp(cur_node, )) != NULL ) {
	  printf(, prop->children->content);

	}
      }
    }
    print_names(cur_node->children);
  }
}

const char *buffer =
  
  April\F\1989-01-02\
  Bob\M\1990-03-04\
  Chad\M\1991-05-06\
  Dave\M\1992-07-08\
  dog\Rover\
  
  1993-09-10\F\&
  ;

int main()
{
  xmlDoc *doc = NULL;
  xmlNode *root = NULL;

  doc = xmlReadMemory(buffer, strlen(buffer), NULL, NULL, 0);
  if ( doc != NULL ) {
    root = xmlDocGetRootElement(doc);
    print_names(root);
    xmlFreeDoc(doc);
  }
  xmlCleanupParser();
  return 0;
}