Retrieving Element Content ar01s03.htmlPrev    ar01s05.htmlNext Retrieving Element Content
Retrieving the content of an element involves traversing the document
    tree until you find what you are looking for. In this case, we are looking
    for an element called "keyword" contained within element called "story". The
    process to find the node we are interested in involves tediously walking the
    tree. We assume you already have an xmlDocPtr called 
doc    and an xmlNodPtr called 
cur.
      
	
1cur = cur->xmlChildrenNode;
	
2while (cur != NULL) {
		if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
			parseStory (doc, cur);
		}
		 
	cur = cur->next;
	}
      
      
#getchildnode1  Get the first child node of cur. At this
	    point, 
cur points at the document root, which is
	    the element "story".
#huntstoryinfo2  This loop iterates through the elements that are children of
	  "story", looking for one called "storyinfo". That
	  is the element that will contain the "keywords" we are
	    looking for. It uses the 
libxml string
	  comparison
	    function, 
http://xmlsoft.org/html/libxml-parser.html#XMLSTRCMPxmlStrcmp . If there is a match, it calls the function parseStory.
    
      
void
parseStory (xmlDocPtr doc, xmlNodePtr cur) {
	xmlChar *key;
	
1 cur = cur->xmlChildrenNode;
	
2 while (cur != NULL) {
	    if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) {
	
3	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
		    printf("keyword: %s\n", key);
		    xmlFree(key);
 	    }
	cur = cur->next;
	}
    return;
}
      
      
#anothergetchild1  Again we get the first child node.
#findkeyword2  Like the loop above, we then iterate through the nodes, looking
	  for one that matches the element we're interested in, in this case
	  "keyword".
#foundkeyword3  When we find the "keyword" element, we need to print
	    its contents. Remember that in 
XML, the text
	    contained within an element is a child node of that element, so we
	    turn to 
cur->xmlChildrenNode. To retrieve it, we
	    use the function 
http://xmlsoft.org/html/libxml-tree.html#XMLNODELISTGETSTRINGxmlNodeListGetString , which also takes the doc pointer as an argument. In this case, we just print it out.
[Note] Note Because xmlNodeListGetString allocates
	      memory for the string it returns, you must use
	      
xmlFree to free it.
    
ar01s03.htmlPrev  index.htmlUp  ar01s05.htmlNext Parsing the file index.htmlHome  Using XPath to Retrieve Element Content 