Esempio n. 1
0
static void
expat_cb_start_element(void *user_data,
    const char *elem, const char **attrs)
{
	struct exmpp_xml_data *edd;
	const char *real_elem, *ns;
	int ns_len;

	edd = (struct exmpp_xml_data *)user_data;

	/* With Expat, we must extract the namespace from the element's
	 * name. */
	real_elem = strchr(elem, NS_SEP);
	if (real_elem != NULL) {
		/* This element has a namespace. */
		ns = elem;
		ns_len = real_elem - elem;
		real_elem++;
	} else {
		ns = NULL;
		ns_len = 0;
		real_elem = elem;
	}

	enter_element(&edd->ctx,
	    ns, ns_len,
	    real_elem, strlen(real_elem),
	    edd->declared_nss, (void *)attrs);

	/* We can now reset the declared_nss list. We only reset the
	 * index to avoid memory free/alloc. */
	if (edd->declared_nss != NULL)
		edd->declared_nss->index = 0;
}
Esempio n. 2
0
static void
libxml2_cb_start_element(void *user_data,
    const xmlChar *elem, const xmlChar *prefix, const xmlChar *ns,
    int declared_nss_count, const xmlChar **declared_nss,
    int attrs_count, int attrs_defaulted, const xmlChar **attrs)
{
	struct exmpp_xml_data *edd;

	edd = (struct exmpp_xml_data *)user_data;

	edd->declared_nss_count = declared_nss_count;
	edd->declared_nss = declared_nss;
	edd->attrs_count = attrs_count;
	edd->attrs = attrs;

	enter_element(&edd->ctx,
	    (char *)ns, -1,
	    (char *)elem, -1,
	    edd, edd);

	/* We can now reset the declared_nss and attrs lists. */
	edd->declared_nss_count = 0;
	edd->declared_nss = NULL;
	edd->attrs_count = 0;
	edd->attrs = NULL;
}