void arv_dom_document_save_to_stream (ArvDomDocument *document, GOutputStream *stream, GError **error) { g_return_if_fail (ARV_IS_DOM_DOCUMENT (document)); g_return_if_fail (G_IS_OUTPUT_STREAM (stream)); arv_dom_node_write_to_stream (ARV_DOM_NODE (document), stream, error); }
void arv_dom_document_append_from_memory (ArvDomDocument *document, ArvDomNode *node, const void *buffer, int size, GError **error) { g_return_if_fail (ARV_IS_DOM_DOCUMENT (document)); g_return_if_fail (ARV_IS_DOM_NODE (node) || node == NULL); g_return_if_fail (buffer != NULL); _parse_memory (document, node, buffer, size, error); }
ArvDomDocument* arv_dom_node_get_owner_document (ArvDomNode* self) { ArvDomNode *parent; g_return_val_if_fail (ARV_IS_DOM_NODE (self), NULL); for (parent = self; parent != NULL && !ARV_IS_DOM_DOCUMENT (parent); parent = parent->parent_node); return ARV_DOM_DOCUMENT (parent); }
static void arv_dom_parser_start_element(void *user_data, const xmlChar *name, const xmlChar **attrs) { ArvDomSaxParserState *state = user_data; ArvDomNode *node; int i; if (state->is_error) { state->error_depth++; return; } if (state->document == NULL) { state->document = arv_dom_implementation_create_document (NULL, (char *) name); state->current_node = ARV_DOM_NODE (state->document); g_return_if_fail (ARV_IS_DOM_DOCUMENT (state->document)); } node = ARV_DOM_NODE (arv_dom_document_create_element (ARV_DOM_DOCUMENT (state->document), (char *) name)); if (ARV_IS_DOM_NODE (node) && arv_dom_node_append_child (state->current_node, node) != NULL) { if (attrs != NULL) for (i = 0; attrs[i] != NULL && attrs[i+1] != NULL; i += 2) arv_dom_element_set_attribute (ARV_DOM_ELEMENT (node), (char *) attrs[i], (char *) attrs[i+1]); state->current_node = node; state->is_error = FALSE; state->error_depth = 0; } else { state->is_error = TRUE; state->error_depth = 1; } }