=== modified file 'src/xml.c' --- src/xml.c 2010-09-14 18:37:26 +0000 +++ src/xml.c 2010-09-20 14:51:27 +0000 @@ -57,13 +57,21 @@ child = child->next; } return Fnreverse (result); - } else if (node->type == XML_TEXT_NODE) { + } else if (node->type == XML_TEXT_NODE || + node->type == XML_COMMENT_NODE) { Lisp_Object content = Qnil; if (node->content) content = build_string (node->content); return Fcons (intern (node->name), content); + } else if (node->type == XML_CDATA_SECTION_NODE) { + Lisp_Object content = Qnil; + + if (node->content) + content = build_string (node->content); + + return Fcons (intern ("cdata"), content); } else return Qnil; } @@ -96,9 +104,19 @@ XML_PARSE_NOERROR); if (doc != NULL) { - node = xmlDocGetRootElement (doc); - if (node != NULL) - result = make_dom (node); + xmlNode* n = doc->children->next; + Lisp_Object r = Qnil; + + while (n) { + if (r != Qnil) result = Fcons (r, result); + r = make_dom (n); + n = n->next; + } + + if (result == Qnil) + result = r; + else + result = Fnreverse (Fcons (r, result)); xmlFreeDoc (doc); xmlCleanupParser ();