Exemple #1
0
gboolean
xml_reader_move_to_element (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return (xmlTextReaderMoveToElement (reader->xml) == 1);
}
Exemple #2
0
xmlReaderTypes
xml_reader_get_node_type (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), 0);

  return xmlTextReaderNodeType (reader->xml);
}
Exemple #3
0
gboolean
xml_reader_is_empty_element (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return xmlTextReaderIsEmptyElement (reader->xml);
}
Exemple #4
0
gint
xml_reader_get_depth (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER(reader), -1);

  return xmlTextReaderDepth (reader->xml);
}
Exemple #5
0
gboolean
xml_reader_move_to_next_attribute (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return (xmlTextReaderMoveToNextAttribute (reader->xml) == 1);
}
Exemple #6
0
gboolean
xml_reader_read (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return (xmlTextReaderRead (reader->xml) == 1);
}
Exemple #7
0
gint
xml_reader_count_attributes (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return xmlTextReaderAttributeCount (reader->xml);
}
Exemple #8
0
/**
 * xml_reader_load_from_file:
 * @reader: a #XmlReader
 * @filename: the full path to an XML file
 * @error: return location for a #GError, or %NULL
 *
 * Loads an XML file at @filename into @reader and sets the #XmlReader
 * to be ready to walk the XML document object model.
 *
 * See also xml_reader_load_from_file().
 *
 * Return value: %TRUE if the file was successfully loaded.
 */
gboolean
xml_reader_load_from_file (XmlReader    *reader,
                           const gchar  *filename,
                           GError      **error)
{
  XmlReaderPrivate *priv;
  GError *internal_error;
  gchar *buffer;
  gboolean retval;

  g_return_val_if_fail (XML_IS_READER (reader), FALSE);
  g_return_val_if_fail (filename != NULL, FALSE);

  priv = reader->priv;

  internal_error = NULL;
  if (!g_file_get_contents (filename, &buffer, NULL, &internal_error))
    {
      g_propagate_error (error, internal_error);
      return FALSE;
    }

  g_free (priv->filename);

  priv->is_filename = TRUE;
  priv->filename = g_strdup (filename);

  retval = xml_reader_load_from_data (reader, buffer, &internal_error);
  if (!retval)
    g_propagate_error (error, internal_error);

  g_free (buffer);

  return retval;
}
Exemple #9
0
gchar*
xml_reader_read_outer_xml (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  RETURN_STRDUP_AND_XMLFREE (xmlTextReaderReadOuterXml (reader->xml));
}
Exemple #10
0
/**
 * xml_reader_count_attributes:
 * @reader: a #XmlReader
 *
 * Counts the attributes on the current element.
 *
 * Return value: the number of elements, or -1 on failure
 */
gint
xml_reader_count_attributes (XmlReader *reader)
{
  XmlReaderPrivate *priv;
  xmlAttrPtr attr;
  gint count;

  g_return_val_if_fail (XML_IS_READER (reader), -1);

  if (xml_reader_get_error (reader, NULL))
    return -1;

  priv = reader->priv;

  if (!priv->node_cursor)
    return -1;

  if (!xml_reader_has_attributes (reader))
    return 0;

  count = 0;
  for (attr = priv->node_cursor->properties; attr != NULL; attr = attr->next)
    count += 1;

  return count;
}
Exemple #11
0
static gboolean
read_to_type_and_name (XmlReader   *reader,
                       gint         type,
                       const gchar *name)
{
  gboolean success = FALSE;

  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  g_return_val_if_fail (reader->xml != NULL, FALSE);

  while (xmlTextReaderRead (reader->xml) == 1)
    {
      if (xmlTextReaderNodeType (reader->xml) == type)
        {
          if (g_strcmp0 (XML_TO_CHAR (xmlTextReaderConstName (reader->xml)), name) == 0)
            {
              success = TRUE;
              break;
            }
        }
    }

  return success;
}
Exemple #12
0
/**
 * xml_reader_read_attribute_name:
 * @reader: a #XmlReader
 * @attribute_name: the name of the attribute to read
 *
 * Moves the internal cursor to the @attribute_name of the current
 * element inside the XML document object model:
 *
 * |[
 *   /* inspect "node" */
 *   xml_reader_read_start_element (reader, "node");
 *
 *   /* inspect the node attributes */
 *   xml_reader_read_attribute_name (reader, "role");
 *   role = g_strdup (xml_reader_get_attribute_value (reader));
 *   xml_reader_read_attribute_name (reader, "direction");
 *   direction = g_strdup (xml_reader_get_attribute_value (reader));
 *
 *   /* retrieve the node content */
 *   node = g_strdup (xml_reader_get_element_value (reader));
 *
 *   xml_reader_read_end_element (reader);
 *
 *   g_print ("Node has role of '%s' and direction '%s': %s\n",
 *            role, direction, node);
 *
 *   g_free (role);
 *   g_free (direction);
 *   g_free (node);
 * ]|
 *
 * Return value: %TRUE if the attribute was found
 */
gboolean
xml_reader_read_attribute_name (XmlReader   *reader,
                                const gchar *attribute_name)
{
  XmlReaderPrivate *priv;
  xmlAttrPtr attr;

  g_return_val_if_fail (XML_IS_READER (reader), FALSE);
  g_return_val_if_fail (attribute_name != NULL, FALSE);

  priv = reader->priv;

  if (!priv->node_cursor)
    return FALSE;

  if (!xml_reader_has_attributes (reader))
    return FALSE;

  for (attr = priv->node_cursor->properties;
       attr != NULL;
       attr = attr->next)
    {
      if (strcmp (XML_TO_CHAR (attr->name), attribute_name) == 0)
        {
          priv->attr_cursor = attr;
          priv->attr_value = xmlGetProp (priv->node_cursor, attr->name);

          return TRUE;
        }
    }

  return FALSE;
}
Exemple #13
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;
}
Exemple #14
0
G_CONST_RETURN gchar *
xml_reader_get_local_name (XmlReader *reader)
{
   g_return_val_if_fail(XML_IS_READER (reader), NULL);

   return XML_TO_CHAR (xmlTextReaderConstLocalName (reader->xml));
}
Exemple #15
0
/**
 * xml_writer_write_attributes:
 * @writer: A #XmlWriter
 * @reader: A #XmlReader
 *
 * Writes the attributes found at the current position of @reader.
 */
void
xml_writer_write_attributes (XmlWriter *writer,
                             XmlReader *reader)
{
  XmlWriterPrivate *priv;
  const gchar *name;
  const gchar *value;
  gint  count;
  gint i;
  
  g_return_if_fail (XML_IS_WRITER (writer));
  g_return_if_fail (XML_IS_READER (reader));
  
  priv = writer->priv;
  count = xml_reader_count_attributes (reader);
  
  for (i = 0; i < count; i++)
    {
      xml_reader_read_attribute_pos (reader, i);
      name = xml_reader_get_attribute_name (reader);
      value = xml_reader_get_attribute_value (reader);
      
      xml_writer_write_attribute_string (writer, name, value);
    }
}
Exemple #16
0
gchar *
xml_reader_read_string (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), NULL);
  g_return_val_if_fail (reader->xml != NULL, NULL);

  RETURN_STRDUP_AND_XMLFREE (xmlTextReaderReadString (reader->xml));
}
Exemple #17
0
gboolean
xml_reader_is_namespace (XmlReader   *reader,
                         const gchar *ns)
{
   g_return_val_if_fail (XML_IS_READER (reader), FALSE);

   return (g_strcmp0 (XML_TO_CHAR(xmlTextReaderConstNamespaceUri (reader->xml)), ns) == 0);
}
Exemple #18
0
static void
xml_reader_set_uri (XmlReader   *reader,
                    const gchar *uri)
{
   g_return_if_fail (XML_IS_READER (reader));
   g_free (reader->uri);
   reader->uri = g_strdup (uri);
}
Exemple #19
0
gboolean
xml_reader_move_to_nth_attribute (XmlReader *reader,
                                  gint       nth)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return (xmlTextReaderMoveToAttributeNo (reader->xml, nth) == 1);
}
Exemple #20
0
static void
xml_reader_set_encoding (XmlReader   *reader,
                         const gchar *encoding)
{
   g_return_if_fail (XML_IS_READER (reader));
   g_free (reader->encoding);
   reader->encoding = g_strdup (encoding);
}
Exemple #21
0
gboolean
xml_reader_move_to_attribute (XmlReader   *reader,
                              const gchar *name)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  return (xmlTextReaderMoveToAttribute (reader->xml, CHAR_TO_XML (name)) == 1);
}
Exemple #22
0
G_CONST_RETURN gchar *
xml_reader_get_value (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), NULL);

  g_return_val_if_fail (reader->xml != NULL, NULL);

  return XML_TO_CHAR (xmlTextReaderConstValue (reader->xml));
}
Exemple #23
0
gchar *
xml_reader_get_attribute (XmlReader   *reader,
                          const gchar *name)
{
  g_return_val_if_fail (XML_IS_READER (reader), NULL);
  g_return_val_if_fail (reader->xml != NULL, NULL);

  RETURN_STRDUP_AND_XMLFREE (xmlTextReaderGetAttribute (reader->xml, CHAR_TO_XML (name)));
}
Exemple #24
0
gboolean
xml_reader_read_to_next_sibling (XmlReader *reader)
{
  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  xmlTextReaderMoveToElement (reader->xml);

  return (xmlTextReaderNextSibling (reader->xml) == 1);
}
Exemple #25
0
void
xml_reader_move_up_to_depth (XmlReader *reader,
                             gint       depth)
{
  g_return_if_fail(XML_IS_READER(reader));

  while (xml_reader_get_depth(reader) > depth)
    xml_reader_read_end_element(reader);
}
Exemple #26
0
gint
xml_reader_get_line_number (XmlReader *reader)
{
  g_return_val_if_fail(XML_IS_READER(reader), -1);

  if (reader->xml)
    return xmlTextReaderGetParserLineNumber(reader->xml);

  return -1;
}
Exemple #27
0
/**
 * xml_reader_get_attribute_value:
 * @reader: a #XmlReader
 *
 * Retrieves the value of the currently read attribute.
 *
 * Return value: the content of the attribute, or %NULL
 */
G_CONST_RETURN gchar *
xml_reader_get_attribute_value (XmlReader *reader)
{
  XmlReaderPrivate *priv;

  g_return_val_if_fail (XML_IS_READER (reader), NULL);

  priv = reader->priv;

  return XML_TO_CHAR (priv->attr_value);
}
Exemple #28
0
/**
 * xml_reader_read_end_element:
 * @reader: a #XmlReader
 *
 * Positions the internal cursor at the end of the current element
 */
void
xml_reader_read_end_element (XmlReader *reader)
{
  XmlReaderPrivate *priv;

  g_return_if_fail (XML_IS_READER (reader));

  priv = reader->priv;

  /* if we are in error state, end-element will unset the
   * error state
   */
  if (xml_reader_get_error (reader, NULL))
    {
      priv->error_state = FALSE;
      priv->node_cursor = priv->parent;
      if (!priv->node_cursor)
        {
          priv->node_cursor = priv->current_doc->xmlRootNode;
          priv->parent = NULL;
        }
      else
        priv->parent = priv->node_cursor->parent;
      return;
    }

  if (!priv->node_cursor)
    {
      g_warning ("No cursor set");
      return;
    }

  if (priv->cursor_value)
    {
      xmlFree (priv->cursor_value);
      priv->cursor_value = NULL;
    }

  if (priv->attr_value)
    {
      xmlFree (priv->attr_value);
      priv->attr_value = NULL;
    }

  priv->depth -= 1;

  priv->node_cursor = priv->parent;
  priv->parent = priv->parent ? priv->parent->parent : NULL;

  if (!priv->node_cursor)
    priv->node_cursor = priv->current_doc->xmlRootNode;

  priv->attr_cursor = NULL;
}
Exemple #29
0
gboolean
xml_reader_read_end_element (XmlReader *reader)
{
  gboolean success = FALSE;

  g_return_val_if_fail (XML_IS_READER (reader), FALSE);

  if (reader->cur_name)
    success = read_to_type_and_name (reader, XML_NODE_TYPE_END_ELEMENT, reader->cur_name);

  return success;
}
Exemple #30
0
static void
xml_reader_error_cb (void                    *arg,
                     const char              *msg,
                     xmlParserSeverities      severity,
                     xmlTextReaderLocatorPtr  locator)
{
  XmlReader *reader = arg;

  g_assert (XML_IS_READER (reader));

  g_signal_emit (reader, signals [ERROR], 0, msg);
}