Skip to content

gokogiri node iteration

suntong edited this page Feb 26, 2016 · 3 revisions

I want to learn to use gokogiri, but there aren't many sample code I can find, so I'm translating a C code from

Libxml2: Everything You Need in an XML Library
http://www.codeguru.com/cpp/data/data-misc/xml/article.php/c14893

Here is the C code:

#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

static void print_element_names(xmlNode * a_node)
{
   xmlNode *cur_node = NULL;

   for (cur_node = a_node; cur_node; cur_node =
      cur_node->next) {
      if (cur_node->type == XML_ELEMENT_NODE) {
         printf("node type: Element, name: %s\n",
            cur_node->name);
      }
      print_element_names(cur_node->children);
   }
}

int main(int argc, char **argv)
{
   xmlDoc *doc = NULL;
   xmlNode *root_element = NULL;

   if (argc != 2)  return(1);

   LIBXML_TEST_VERSION    // Macro to check API for match with
                          // the DLL we are using

   /*parse the file and get the DOM/
   if (doc = xmlReadFile(argv[1], NULL, 0)) == NULL){
      printf("error: could not parse file %s\n", argv[1]);
      exit(-1);
      }

   /*Get the root element nod/
   root_element = xmlDocGetRootElement(doc);
   print_element_names(root_element);
   xmlFreeDoc(doc);       // free document
   xmlCleanupParser();    // Free globals
   return 0;
}

The final working go code can be found at

http://play.golang.org/p/RADk6kHAAS (Ref, golang-nuts answer by ksug)

or here for an enhanced version

Clone this wiki locally