Parsing the file requires only the name of the file and a single function call, plus error checking. Full code: Appendix C, Code for Keyword Example
         xmlDocPtr doc;
 xmlDocPtr doc;
	 xmlNodePtr cur;
 xmlNodePtr cur;
	 doc = xmlParseFile(docname);
 doc = xmlParseFile(docname);
	
	 if (doc == NULL ) {
		fprintf(stderr,"Document not parsed successfully. \n");
		return;
	}
 if (doc == NULL ) {
		fprintf(stderr,"Document not parsed successfully. \n");
		return;
	}
	 cur = xmlDocGetRootElement(doc);
 cur = xmlDocGetRootElement(doc);
	
	 if (cur == NULL) {
		fprintf(stderr,"empty document\n");
		xmlFreeDoc(doc);
		return;
	}
 if (cur == NULL) {
		fprintf(stderr,"empty document\n");
		xmlFreeDoc(doc);
		return;
	}
	
	 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
		fprintf(stderr,"document of the wrong type, root node != story");
		xmlFreeDoc(doc);
		return;
	}
 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
		fprintf(stderr,"document of the wrong type, root node != story");
		xmlFreeDoc(doc);
		return;
	}
    
|   | Declare the pointer that will point to your parsed document. | ||||
|   | Declare a node pointer (you'll need this in order to interact with individual nodes). | ||||
|   | Check to see that the document was successfully parsed. If it was not, libxml will at this point register an error and stop. 
 
 | ||||
|   | Retrieve the document's root element. | ||||
|   | Check to make sure the document actually contains something. | ||||
|   | In our case, we need to make sure the document is the right type. "story" is the root type of the documents used in this tutorial. | ||||