+ xmlNodePtr root;
+ xmlNodePtr child;
+ entry = g_slice_new0 (AtomEntry);
+ entry->doc = xmlReadMemory (data, len, NULL, NULL,
+ XML_PARSE_RECOVER | XML_PARSE_NOERROR);
+ if (entry->doc == NULL ||
+ (root = xmlDocGetRootElement (entry->doc)) == NULL)
+ {
+ g_slice_free (AtomEntry, entry);
+ return NULL;
+ }
+ if (xmlStrcmp (root->name, "entry"))
+ {
+ xmlFreeDoc (entry->doc);
+ g_slice_free (AtomEntry, entry);
+ return NULL;
+ }
+ for (child = root->xmlChildrenNode; child != NULL; child = child->next)
+ {
+ char * content;
+ content = xmlNodeGetContent (child->xmlChildrenNode);
+ if (!xmlStrcmp (child->name, "id"))
+ entry->id = content;
+ else if (!xmlStrcmp (child->name, "title"))
+ entry->title = content;
+ else if (!xmlStrcmp (child->name, "summary"))
+ entry->summary = content;
+ else if (!xmlStrcmp (child->name, "author"))
+ entry->author = atom_person_new_from_xmlnode (child);
+ else
+ xmlFree (content);
+ }