entry->summary = g_strdup (summary);
}
+static void
+atom_entry_update_xmlnode (AtomEntry *entry)
+{
+ xmlNodePtr root;
+ xmlNodePtr id;
+ xmlNodePtr title;
+ xmlNodePtr summary;
+ xmlNodePtr author;
+ int i;
+ if (entry->doc == NULL)
+ {
+ entry->doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "entry");
+ xmlNewNs (root, ATOM_NAMESPACE, NULL);
+ xmlDocSetRootElement (entry->doc, root);
+ }
+ else
+ {
+ xmlNodePtr child;
+ xmlNodePtr next;
+ root = xmlDocGetRootElement (entry->doc);
+ child = root->xmlChildrenNode;
+ while (child != NULL)
+ {
+ next = child->next;
+ if (!xmlStrcmp (child->name, "id") ||
+ !xmlStrcmp (child->name, "title") ||
+ !xmlStrcmp (child->name, "summary") ||
+ !xmlStrcmp (child->name, "author"))
+ {
+ xmlUnlinkNode (child);
+ xmlFreeNode (child);
+ }
+ child = next;
+ }
+ }
+ id = xmlNewTextChild (root, NULL, "id", entry->id);
+ title = xmlNewTextChild (root, NULL, "title", entry->title);
+ if (entry->summary)
+ summary = xmlNewTextChild (root, NULL, "summary", entry->summary);
+ for (i = 0; i < entry->authors->len; i++)
+ {
+ AtomPerson *person;
+ person = g_ptr_array_index (entry->authors, i);
+ author = atom_person_to_xmlnode (person, "author");
+ xmlAddChild (root, author);
+ }
+}
+
void
atom_entry_string (AtomEntry *entry, char **buffer, size_t *len)
{
+ atom_entry_update_xmlnode (entry);
xmlDocDumpMemory (entry->doc, buffer, len);
}
xmlNodePtr
atom_entry_to_xmlnode (AtomEntry *entry)
{
- if (entry->doc)
- return xmlCopyNodeList (xmlDocGetRootElement (entry->doc));
- return NULL;
+ atom_entry_update_xmlnode (entry);
+ return xmlCopyNodeList (xmlDocGetRootElement (entry->doc));
}