Parsing the file

Parsing the file requires only the name of the file and a single function call, plus error checking. Full code: Appendix B

        1 xmlDocPtr doc;
	2 xmlNodePtr cur;

	3 doc = xmlParseFile(docname);
	
	4 if (doc == NULL ) {
		fprintf(stderr,"Document not parsed successfully. \n");
                xmlFreeDoc(doc);
		return;
	}

	5 cur = xmlDocGetRootElement(doc);
	
	6 if (cur == NULL) {
		fprintf(stderr,"empty document\n");
		xmlFreeDoc(doc);
		return;
	}
	
	7 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
		fprintf(stderr,"document of the wrong type, root node != story");
		xmlFreeDoc(doc);
		return;
	}

    

1

Declare the pointer that will point to your parsed document.

2

Declare a node pointer (you'll need this in order to interact with individual nodes).

4

Check to see that the document was successfully parsed. If it was not, libxml will at this point register an error and stop.

Note

One common example of an error at this point is improper handling of encoding. The XML standard requires documents stored with an encoding other than UTF-8 or UTF-16 to contain an explicit declaration of their encoding. If the declaration is there, libxml will automatically perform the necessary conversion to UTF-8 for you. More information on XML's encoding requirements is contained in the standard.

5

Retrieve the document's root element.

6

Check to make sure the document actually contains something.

7

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.