Source Code File 05-05_nodehunt
05-05_nodehunt.c
#include <stdio.h>
#include <stdlib.h>
#include <libxml/parser.h>
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
xmlNodePtr found;
int node_hunt(xmlNodePtr n, const xmlChar *e)
{
xmlNodePtr node;
int r;
for( node=n; node; node=node->next)
{
if( node->type==XML_ELEMENT_NODE )
{
if( !xmlStrcmp( node->name, e) )
{
found = node;
return(TRUE);
}
}
if( node->children )
{
r = node_hunt( node->children, e );
if( r )
return(r);
}
}
return(FALSE);
}
int main()
{
const char filename[] = "sample.xml";
xmlDocPtr doc;
xmlNodePtr root;
int r;
doc = xmlParseFile(filename);
if( doc==NULL )
{
fprintf(stderr,"Unable to open %s\n",filename);
exit(1);
}
root = xmlDocGetRootElement(doc);
r = node_hunt(root, (const xmlChar *)"lastName");
if( r )
{
printf("<%s> found\n",found->name);
printf("Parent is <%s>\n",found->parent->name);
}
xmlFreeDoc(doc);
return(0);
}
Output Screenshot
<lastName> found
Parent is <character>
Notes
* Ensure that you check the book to read about the flaw in the node_hunt() function.
Copyright © 1997-2025 by QPBC.
All rights reserved
