Beispiel #1
0
/**
 * gdata_entry_new_from_xml:
 * @entry_xml: the xml tree
 * Returns a GDataEntry object:
 **/
GDataEntry *
gdata_entry_new_from_xml (const gchar *entry_xml)
{
	GDataEntry *entry = NULL;
	xmlDocPtr doc;
	xmlNodePtr cur;

	g_return_val_if_fail (entry_xml != NULL && *entry_xml != '\0', NULL);
	doc = xmlReadMemory (entry_xml, strlen(entry_xml), "feed.xml", NULL, 0);

	if (doc == NULL)
		return NULL;

	cur = xmlDocGetRootElement (doc);
	if (cur == NULL)
		xmlFree (doc);

	while (cur != NULL) {
		if (!xmlStrcmp (cur->name,(xmlChar *)"entry"))
			entry = gdata_entry_new_from_xmlptr (doc, cur);
		cur = cur->next;
	}
	/*Free them */
	xmlFreeDoc (doc);
	xmlFreeNode (cur);

	if (!GDATA_IS_ENTRY(entry))
		return NULL;

	return entry;
}
Beispiel #2
0
/*Returns all the entries from the feed */
GSList *
gdata_entries_new_from_xml (const gchar *feed_xml, const gint length)
{
	GSList *list;
	xmlNodePtr cur;
	xmlDocPtr doc;

	list = NULL;

	g_return_val_if_fail(feed_xml != NULL && *feed_xml != '\0', NULL);

	doc = xmlReadMemory (feed_xml, strlen(feed_xml), "feed.xml", NULL, 0);
	if (doc == NULL)
		return NULL;

	cur = xmlDocGetRootElement (doc);
	if (cur == NULL) {
		xmlFree (doc);
	}

	cur = cur->xmlChildrenNode;
	while (cur != NULL)
	{
		if (!xmlStrcmp (cur->name, (xmlChar *)"entry")) {
			list = g_slist_prepend (list, gdata_entry_new_from_xmlptr (doc, cur));
		}
		cur = cur->next;
	}

	/* Free them */
	xmlFreeDoc (doc);
	xmlFreeNode (cur);

	if (list == NULL)
		g_slist_free (list);

	return list;
}
Beispiel #3
0
GDataFeed *
gdata_feed_new_from_xml(const gchar* feedXML, const gint length)
{
	GDataFeed *feed;
	GDataFeedPrivate *priv;

	xmlDocPtr doc;
	xmlNodePtr cur;

	xmlChar *value;
	gint value_size;

	g_return_val_if_fail(feedXML != NULL && *feedXML != '\0', NULL);
	doc = xmlReadMemory(feedXML, length,
			"feed.xml",
			NULL,
			0);

	if (doc == NULL)
		return NULL;

	cur = xmlDocGetRootElement(doc);
	if (cur == NULL) {
		/* Empty */
		xmlFreeDoc(doc);
		return NULL;
	}

	if (xmlStrcmp(cur->name, (xmlChar *)"feed")) {
		xmlFreeDoc(doc);
		return NULL;
	}

	feed = g_object_new(GDATA_TYPE_FEED, NULL);
	priv  = GDATA_FEED_GET_PRIVATE(feed);

	cur = cur->xmlChildrenNode;
	while (cur != NULL) {

		if (!xmlStrcmp(cur->name, (xmlChar *)"author")) {
			priv->authors = g_slist_prepend(priv->authors, xmlnode_to_author(doc, cur));
		}
		else if (!xmlStrcmp(cur->name, (xmlChar *)"link")) {
			priv->links = g_slist_prepend(priv->links, xmlnode_to_link(doc, cur));
		}
		else if (!xmlStrcmp(cur->name, (xmlChar *)"category")) {
			priv->categories = g_slist_prepend(priv->categories, xmlnode_to_category(doc, cur));
		}
		else if (!xmlStrcmp(cur->name, (xmlChar *)"updated")) {
			value = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
			priv->updated = g_strdup ((gchar*)value);
			xmlFree(value);
		}
		else if (!xmlStrcmp(cur->name, (xmlChar *)"entry")) {
			priv->entries = g_slist_prepend(priv->entries, gdata_entry_new_from_xmlptr(doc,cur));
		}
		else {
			value = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
			g_hash_table_insert(priv->field_table, g_strdup((gchar *)cur->name),
					g_strdup((gchar *)value));
			xmlFree(value);
		}
		cur = cur->next;
	}

	xmlDocDumpFormatMemory(doc, &value, &value_size, 1);
	priv->feedXML = g_strdup(feedXML);

	xmlFree(value);
	xmlFreeDoc(doc);

	return feed;
}