Johan den Boer wrote:
Hi
I tried the code below ( parseDoc ) on my xml file ( see below ) but this
gives me a core dump on xmlStrcmp function. It seems that cur->name is a
NULL pointer. cur->contents has the value 'story'.
What am I doing wrong ?
xml file
<?xml version="1.0"?>
<story>
<storyinfo>
<author>Some author</author>
</storyinfo>
</story>
void parseDoc( char *docname )
{
xmlDocPtr doc;
xmlNodePtr cur;
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;
}
// Next function call gives core dump because cur->name is NULL pointer
if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
fprintf(stderr,"document of the wrong type, root node != story");
xmlFreeDoc(doc);
return;
}
}
I took your code and tried this on my machine (SunBlade 150, Solaris 9,
libxml2-2.4.23).
Everything works like expected: name = "story" !
Breakpoint 1, parseDoc (docname=0x10a10 "test.xml") at test.c:26
26 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
(gdb) p *cur
$2 = {_private = 0x0, type = XML_ELEMENT_NODE, name = 0x20fa0 "story",
children = 0x34a88, last = 0x34c08, parent = 0x349f0,
next = 0x0, prev = 0x0, doc = 0x349f0, ns = 0x0, content = 0x0,
properties = 0x0, nsDef = 0x0}
(gdb)
What's the version of your libxml ?
Regards - Frank