gboolean xml_reader_load_from_stream (XmlReader *reader, GInputStream *stream, GError **error) { g_return_val_if_fail (XML_IS_READER(reader), FALSE); xml_reader_clear (reader); reader->xml = xmlReaderForIO (xml_reader_io_read_cb, xml_reader_io_close_cb, stream, reader->uri, reader->encoding, XML_PARSE_RECOVER | XML_PARSE_NOBLANKS | XML_PARSE_COMPACT); if (!reader->xml) { g_set_error (error, XML_READER_ERROR, XML_READER_ERROR_INVALID, _("Could not parse XML from stream")); return FALSE; } reader->stream = g_object_ref (stream); xmlTextReaderSetErrorHandler (reader->xml, xml_reader_error_cb, reader); return TRUE; }
static void xml_reader_finalize (GObject *gobject) { XmlReaderPrivate *priv = XML_READER (gobject)->priv; g_free (priv->filename); xml_reader_clear (XML_READER (gobject)); G_OBJECT_CLASS (xml_reader_parent_class)->finalize (gobject); }
gboolean xml_reader_load_from_path (XmlReader *reader, const gchar *path) { g_return_val_if_fail (XML_IS_READER (reader), FALSE); xml_reader_clear (reader); if ((reader->xml = xmlNewTextReaderFilename (path))) xmlTextReaderSetErrorHandler (reader->xml, xml_reader_error_cb, reader); return (reader->xml != NULL); }
static void xml_reader_finalize (GObject *object) { XmlReader *reader = (XmlReader *)object; xml_reader_clear (reader); g_free (reader->encoding); reader->encoding = NULL; g_free (reader->uri); reader->uri = NULL; G_OBJECT_CLASS (xml_reader_parent_class)->finalize (object); }
/** * xml_reader_load_from_data: * @reader: a #XmlReader * @buffer: a %NULL terminated string containing an XML stream * @error: return location for a #GError, or %NULL * * Loads the XML into the @reader and sets the initial status of the * DOM to be ready to be walked using the #XmlReader methods. * * If @reader was already being used, the previous state is discarded; * this is also true for an #XmlReader instance in an error state. * * In case of error, %FALSE is returned and @error is set. * * Return value: %TRUE if the XML data was successfully loaded. */ gboolean xml_reader_load_from_data (XmlReader *reader, const gchar *buffer, GError **error) { XmlReaderPrivate *priv; g_return_val_if_fail (XML_IS_READER (reader), FALSE); g_return_val_if_fail (buffer != NULL, FALSE); priv = reader->priv; xml_reader_clear (reader); LIBXML_TEST_VERSION; priv->current_doc = xmlReadMemory (buffer, strlen (buffer), NULL, NULL, XML_PARSE_RECOVER | XML_PARSE_NOBLANKS | XML_PARSE_COMPACT); if (!priv->current_doc) { gchar *error_message; if (!priv->is_filename) error_message = g_strdup ("Unable to parse XML buffer"); else error_message = g_strdup_printf ("Unable to parse file `%s'", priv->filename); g_set_error (error, XML_READER_ERROR, XML_READER_ERROR_INVALID, error_message); g_free (error_message); return FALSE; } priv->parent = priv->current_doc->xmlRootNode; priv->node_cursor = NULL; priv->attr_cursor = NULL; priv->depth = 0; return TRUE; }
gboolean xml_reader_load_from_data (XmlReader *reader, const gchar *data, gssize length, const gchar *uri, const gchar *encoding) { g_return_val_if_fail (XML_IS_READER (reader), FALSE); xml_reader_clear (reader); if (length == -1) length = strlen (data); reader->xml = xmlReaderForMemory (data, length, uri, encoding, 0); xmlTextReaderSetErrorHandler (reader->xml, xml_reader_error_cb, reader); return (reader->xml != NULL); }