Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
/**
 * 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;
}
Esempio n. 6
0
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);
}