#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>

static int searchNode ( xmlDocPtr doc, xmlNodePtr node, xmlChar *nodename )
{	
	static int count;

	if ( node -> next != NULL )
	{
		searchNode ( doc, node -> next, nodename );
	}
	
	if ( node -> children != NULL )
	{
		searchNode ( doc, node -> children, nodename );
	}
	
	if ( !xmlStrcmp ( node -> name, nodename ) )
	{
		count++;
	}
	
	return count;
}

static void parseDoc ( char *docname, xmlChar *nodename )
{
	xmlDocPtr doc;
	xmlNodePtr cur;
	xmlChar *key;
	
	doc = xmlParseFile ( docname );
	
	if ( doc == NULL )
	{
		fprintf ( stderr, "Document not parsed successfully. \n");
		
		return;
	}
	
	cur = xmlDocGetRootElement ( doc );
	
	if ( cur == NULL )
	{
		fprintf ( stderr, "empty document\n" );
		xmlFreeDoc ( doc );
		
		return;
	}
	
	int res = searchNode ( doc, cur, nodename );
	printf ( "%s was found %d times.\n", nodename, res);
	
	xmlFreeDoc ( doc );
	
	return;
}

int main ( int argc, char **argv )
{
	char *docname;
	xmlChar *nodename;
	
	if ( argc <= 2 )
	{
		printf ( "Usage: %s docname nodename\n", argv [0] );
		return ( 0 );
	}
	
	docname = argv [1];
	nodename = argv [2];
	
	parseDoc ( docname, nodename );

	return ( 1 );
}


