XML and libxml

XML and libxml

Synopsis





                    GsfXMLIn;
                    GsfXMLInDoc;
gboolean            (*GsfXMLInUnknownFunc)              (GsfXMLIn *xin,
                                                         xmlChar const *elem,
                                                         xmlChar const **attrs);
                    GsfXMLInNS;
                    GsfXMLInNode;
void                (*GsfXMLInExtDtor)                  (GsfXMLIn *xin,
                                                         gpointer old_state);
enum                GsfXMLContent;
                    GsfXMLBlob;
                    GsfInputHTTP;
#define             GSF_XML_IN_NODE_FULL                (parent_id, id, ns, name, has_content, 	
                                                         			     share_children_with_parent, check_ns, start, end, user)
#define             GSF_XML_IN_NODE                     (parent_id, id, ns, name, has_content, start, end)
#define             GSF_XML_IN_NODE_END
#define             GSF_XML_IN_NS                       (id, uri)
#define             GSF_XML_IN_NS_END
GsfXMLInDoc*        gsf_xml_in_doc_new                  (GsfXMLInNode const *nodes,
                                                         GsfXMLInNS const *ns);
void                gsf_xml_in_doc_free                 (GsfXMLInDoc *doc);
gboolean            gsf_xml_in_doc_parse                (GsfXMLInDoc *doc,
                                                         GsfInput *input,
                                                         gpointer user_state);
void                gsf_xml_in_doc_set_unknown_handler  (GsfXMLInDoc *doc,
                                                         GsfXMLInUnknownFunc handler);
void                gsf_xml_in_push_state               (GsfXMLIn *xin,
                                                         GsfXMLInDoc const *doc,
                                                         gpointer new_state,
                                                         GsfXMLInExtDtor dtor,
                                                         xmlChar const **attrs);
gboolean            gsf_xml_in_namecmp                  (GsfXMLIn const *xin,
                                                         char const *str,
                                                         unsigned int ns_id,
                                                         char const *name);
charconst  *        gsf_xml_in_check_ns                 (GsfXMLIn const *xin,
                                                         char const *str,
                                                         unsigned int ns_id);
GsfInput*           gsf_xml_in_get_input                (GsfXMLIn const *xin);

                    GsfXMLOut;
GsfXMLOut*          gsf_xml_out_new                     (GsfOutput *output);
void                gsf_xml_out_set_doc_type            (GsfXMLOut *xout,
                                                         char const *type);
GsfOutput*          gsf_xml_out_get_output              (GsfXMLOut const *xout);
void                gsf_xml_out_start_element           (GsfXMLOut *xout,
                                                         char const *id);
charconst *         gsf_xml_out_end_element             (GsfXMLOut *xout);
void                gsf_xml_out_add_cstr                (GsfXMLOut *xout,
                                                         char const *id,
                                                         char const *val_utf8);
void                gsf_xml_out_add_cstr_unchecked      (GsfXMLOut *xout,
                                                         char const *id,
                                                         char const *val_utf8);
void                gsf_xml_out_add_bool                (GsfXMLOut *xout,
                                                         char const *id,
                                                         gboolean val);
void                gsf_xml_out_add_int                 (GsfXMLOut *xout,
                                                         char const *id,
                                                         int val);
void                gsf_xml_out_add_uint                (GsfXMLOut *xout,
                                                         char const *id,
                                                         unsigned int val);
void                gsf_xml_out_add_float               (GsfXMLOut *xout,
                                                         char const *id,
                                                         double val,
                                                         int precision);
void                gsf_xml_out_add_enum                (GsfXMLOut *xout,
                                                         char const *id,
                                                         GType etype,
                                                         gint val);
void                gsf_xml_out_add_color               (GsfXMLOut *xout,
                                                         char const *id,
                                                         unsigned int r,
                                                         unsigned int g,
                                                         unsigned int b);
void                gsf_xml_out_add_base64              (GsfXMLOut *xout,
                                                         char const *id,
                                                         guint8 const *data,
                                                         unsigned int len);
void                gsf_xml_out_add_gvalue              (GsfXMLOut *xout,
                                                         char const *id,
                                                         GValue const *val);
void                gsf_xml_out_simple_element          (GsfXMLOut *xout,
                                                         char const *id,
                                                         char const *content);
void                gsf_xml_out_simple_float_element    (GsfXMLOut *xout,
                                                         char const *id,
                                                         double val,
                                                         int precision);
void                gsf_xml_out_simple_int_element      (GsfXMLOut *xout,
                                                         char const *id,
                                                         int val);

gchar*              gsf_input_http_get_content_type     (GsfInputHTTP *input);
GType               gsf_input_http_get_type             (void);
gchar*              gsf_input_http_get_url              (GsfInputHTTP *input);

xmlParserCtxt*      gsf_xml_parser_context              (GsfInput *input);
gboolean            gsf_xml_gvalue_from_str             (GValue *res,
                                                         GType t,
                                                         char const *str);
int                 gsf_xmlDocFormatDump                (GsfOutput *output,
                                                         xmlDoc *cur,
                                                         char const *encoding,
                                                         gboolean format);

Object Hierarchy


  GObject
   +----GsfXMLOut

Properties


  "pretty-print"             gboolean              : Read / Write

Description

Details

GsfXMLIn

typedef struct {
	/* public state : read only */
	gpointer	    user_state;
	GString		   *content;
	GsfXMLInDoc  const *doc;
	GsfXMLInNode const *node;	/* current node (not on the stack) */
	GSList	 	   *node_stack;	/* stack of GsfXMLInNode */
} GsfXMLIn;


GsfXMLInDoc

typedef struct _GsfXMLInDoc GsfXMLInDoc;


GsfXMLInUnknownFunc ()

gboolean            (*GsfXMLInUnknownFunc)              (GsfXMLIn *xin,
                                                         xmlChar const *elem,
                                                         xmlChar const **attrs);

xin :

elem :

attrs :

Returns :


GsfXMLInNS

typedef struct {
	char const *uri;
	unsigned    ns_id;
} GsfXMLInNS;


GsfXMLInNode

typedef struct {
	char const *id;		/* unique in the entire tree */
	int	    ns_id;
	char const *name;
	char const *parent_id;
	void (*start) (GsfXMLIn *xin, xmlChar const **attrs);
	void (*end)   (GsfXMLIn *xin, GsfXMLBlob *unknown);

	union {
		int	    v_int;
		gboolean    v_bool;
		gpointer    v_blob;
		char const *v_str;
	} user_data;
	GsfXMLContent has_content;

	unsigned int check_children_for_ns : 1;
	unsigned int share_children_with_parent : 1;
} GsfXMLInNode;


GsfXMLInExtDtor ()

void                (*GsfXMLInExtDtor)                  (GsfXMLIn *xin,
                                                         gpointer old_state);

xin :

old_state :


enum GsfXMLContent

typedef enum {
	GSF_XML_NO_CONTENT = FALSE,
	GSF_XML_CONTENT,
	GSF_XML_SHARED_CONTENT
} GsfXMLContent;


GsfXMLBlob

typedef struct _GsfXMLBlob GsfXMLBlob;


GsfInputHTTP

typedef struct _GsfInputHTTP GsfInputHTTP;


GSF_XML_IN_NODE_FULL()

#define             GSF_XML_IN_NODE_FULL(parent_id, id, ns, name, has_content, 	\
            			     share_children_with_parent, check_ns, start, end, user)

parent_id :

id :

ns :

name :

has_content :

share_children_with_parent :

check_ns :

start :

end :

user :


GSF_XML_IN_NODE()

#define             GSF_XML_IN_NODE(parent_id, id, ns, name, has_content, start, end)

parent_id :

id :

ns :

name :

has_content :

start :

end :


GSF_XML_IN_NODE_END

#define             GSF_XML_IN_NODE_END


GSF_XML_IN_NS()

#define             GSF_XML_IN_NS(id, uri)

id :

uri :


GSF_XML_IN_NS_END

#define             GSF_XML_IN_NS_END


gsf_xml_in_doc_new ()

GsfXMLInDoc*        gsf_xml_in_doc_new                  (GsfXMLInNode const *nodes,
                                                         GsfXMLInNS const *ns);

Combine the nodes in the NULL terminated array starting at nodes with the name spaces in the NULL terminated array starting at ns. Prepare the data structures necessary to validate a doument based on that description.

nodes :

an array of node descriptors

ns :

an array of namespace identifiers

Returns :

NULL on error

gsf_xml_in_doc_free ()

void                gsf_xml_in_doc_free                 (GsfXMLInDoc *doc);

Free up resources

doc :

GsfXMLInDoc

gsf_xml_in_doc_parse ()

gboolean            gsf_xml_in_doc_parse                (GsfXMLInDoc *doc,
                                                         GsfInput *input,
                                                         gpointer user_state);

Read an xout document from input and parse based on the the descriptor in doc

doc :

GsfXMLInDoc

input :

GsfInput

user_state :

Returns :

FALSE on error

gsf_xml_in_doc_set_unknown_handler ()

void                gsf_xml_in_doc_set_unknown_handler  (GsfXMLInDoc *doc,
                                                         GsfXMLInUnknownFunc handler);

Call the function handler when an unexpected child node is found

doc :

GsfXMLInDoc

handler :

The function to call

gsf_xml_in_push_state ()

void                gsf_xml_in_push_state               (GsfXMLIn *xin,
                                                         GsfXMLInDoc const *doc,
                                                         gpointer new_state,
                                                         GsfXMLInExtDtor dtor,
                                                         xmlChar const **attrs);

Take the first node from doc as the current node and call it's start handler.

xin :

GsfXMLIn

doc :

GsfXMLInDoc

new_state :

dtor :

GsfXMLInExtDtor

attrs :

array of xmlChar const *

gsf_xml_in_namecmp ()

gboolean            gsf_xml_in_namecmp                  (GsfXMLIn const *xin,
                                                         char const *str,
                                                         unsigned int ns_id,
                                                         char const *name);

xin :

The GsfXMLIn we are reading from.

str :

The potentially namespace qualified node name.

ns_id :

The name space id to check

name :

The target node name

Returns :

TRUE if str == ns_id:name according to state.

gsf_xml_in_check_ns ()

charconst  *        gsf_xml_in_check_ns                 (GsfXMLIn const *xin,
                                                         char const *str,
                                                         unsigned int ns_id);

According to state is str in the namespace ns_id ?

xin :

GsfXMLIn

str :

ns_id :

Returns :

a pointer to str after the namespace if successful, otherwise NULL.

gsf_xml_in_get_input ()

GsfInput*           gsf_xml_in_get_input                (GsfXMLIn const *xin);

(New in 1.14.2)

xin :

GsfXMLIn

Returns :

(but does not reference) the stream being parsed.

GsfXMLOut

typedef struct _GsfXMLOut GsfXMLOut;


gsf_xml_out_new ()

GsfXMLOut*          gsf_xml_out_new                     (GsfOutput *output);

Create an XML output stream.

output :

GsfOutput

Returns :

GsfXMLOut

gsf_xml_out_set_doc_type ()

void                gsf_xml_out_set_doc_type            (GsfXMLOut *xout,
                                                         char const *type);

Store some optional some <!DOCTYPE .. > content

xout :

GsfXMLOut

type :

the document type declaration

gsf_xml_out_get_output ()

GsfOutput*          gsf_xml_out_get_output              (GsfXMLOut const *xout);

xout :

Returns :


gsf_xml_out_start_element ()

void                gsf_xml_out_start_element           (GsfXMLOut *xout,
                                                         char const *id);

Output a start element id, if necessary preceeded by an XML declaration.

xout :

GsfXMLOut

id :

Element name

gsf_xml_out_end_element ()

charconst *         gsf_xml_out_end_element             (GsfXMLOut *xout);

Closes/ends an XML element.

xout :

GsfXMLOut

Returns :

the element that has been closed.

gsf_xml_out_add_cstr ()

void                gsf_xml_out_add_cstr                (GsfXMLOut *xout,
                                                         char const *id,
                                                         char const *val_utf8);

dump val_utf8 to an attribute named id or as the nodes content escaping characters as necessary. If val_utf8 is NULL do nothing (no warning, no output)

xout :

GsfXMLOut

id :

optionally NULL for content

val_utf8 :

a utf8 encoded string

gsf_xml_out_add_cstr_unchecked ()

void                gsf_xml_out_add_cstr_unchecked      (GsfXMLOut *xout,
                                                         char const *id,
                                                         char const *val_utf8);

dump val_utf8 to an attribute named id without checking to see if the content needs escaping. A useful performance enhancement when the application knows that structure of the content well. If val_utf8 is NULL do nothing (no warning, no output)

xout :

GsfXMLOut

id :

optionally NULL for content

val_utf8 :

a utf8 encoded string to export

gsf_xml_out_add_bool ()

void                gsf_xml_out_add_bool                (GsfXMLOut *xout,
                                                         char const *id,
                                                         gboolean val);

dump boolean value val to an attribute named id or as the nodes content Use '1' or '0' to simplify import

xout :

GsfXMLOut

id :

optionally NULL for content

val :

a boolean

gsf_xml_out_add_int ()

void                gsf_xml_out_add_int                 (GsfXMLOut *xout,
                                                         char const *id,
                                                         int val);

dump integer value val to an attribute named id or as the nodes content

xout :

GsfXMLOut

id :

optionally NULL for content

val :

the value

gsf_xml_out_add_uint ()

void                gsf_xml_out_add_uint                (GsfXMLOut *xout,
                                                         char const *id,
                                                         unsigned int val);

dump unsigned integer value val to an attribute named id or as the nodes content

xout :

GsfXMLOut

id :

optionally NULL for content

val :

the value

gsf_xml_out_add_float ()

void                gsf_xml_out_add_float               (GsfXMLOut *xout,
                                                         char const *id,
                                                         double val,
                                                         int precision);

dump float value val to an attribute named id or as the nodes content with precision precision. The number will be formattted according to the "C" locale.

xout :

GsfXMLOut

id :

optionally NULL for content

val :

the value

precision :

the number of significant digits to use, -1 meaning "enough".

gsf_xml_out_add_enum ()

void                gsf_xml_out_add_enum                (GsfXMLOut *xout,
                                                         char const *id,
                                                         GType etype,
                                                         gint val);

Output the name of value val of enumeration type etype.

xout :

GsfXMLOut

id :

optionally NULL for content

etype :

GType

val :

enum element number

gsf_xml_out_add_color ()

void                gsf_xml_out_add_color               (GsfXMLOut *xout,
                                                         char const *id,
                                                         unsigned int r,
                                                         unsigned int g,
                                                         unsigned int b);

dump Color r.g.b to an attribute named id or as the nodes content

xout :

GsfXMLOut

id :

optionally NULL for content

r :

Red value

g :

Green value

b :

Blue value

gsf_xml_out_add_base64 ()

void                gsf_xml_out_add_base64              (GsfXMLOut *xout,
                                                         char const *id,
                                                         guint8 const *data,
                                                         unsigned int len);

dump len bytes in data into the content of node id using base64

xout :

GsfXMLOut

id :

optionally NULL for content

data :

Data to be written

len :

Length of data

gsf_xml_out_add_gvalue ()

void                gsf_xml_out_add_gvalue              (GsfXMLOut *xout,
                                                         char const *id,
                                                         GValue const *val);

Output the value of val as a string. Does NOT store any type information with the string, just thevalue.

xout :

GsfXMLOut

id :

optionally NULL for content

val :

GValue

gsf_xml_out_simple_element ()

void                gsf_xml_out_simple_element          (GsfXMLOut *xout,
                                                         char const *id,
                                                         char const *content);

Convenience routine to output a simple id element with content content.

xout :

GsfXMLOut

id :

Element name

content :

Content of the element

gsf_xml_out_simple_float_element ()

void                gsf_xml_out_simple_float_element    (GsfXMLOut *xout,
                                                         char const *id,
                                                         double val,
                                                         int precision);

Convenience routine to output an element id with float value val using precision significant digits.

xout :

GsfXMLOut

id :

Element name

val :

Element value

precision :

the number of significant digits to use, -1 meaning "enough".

gsf_xml_out_simple_int_element ()

void                gsf_xml_out_simple_int_element      (GsfXMLOut *xout,
                                                         char const *id,
                                                         int val);

Convenience routine to output an element id with integer value val.

xout :

GsfXMLOut

id :

Element name

val :

Element value

gsf_input_http_get_content_type ()

gchar*              gsf_input_http_get_content_type     (GsfInputHTTP *input);

input :

GsfInputHTTP

Returns :

an allocated string containing the Content-Type field of the HTTP response.

gsf_input_http_get_type ()

GType               gsf_input_http_get_type             (void);

Returns :


gsf_input_http_get_url ()

gchar*              gsf_input_http_get_url              (GsfInputHTTP *input);

input :

GsfInputHTTP

Returns :

an allocated string containing the URL used for input.

gsf_xml_parser_context ()

xmlParserCtxt*      gsf_xml_parser_context              (GsfInput *input);

Create a libxml2 pull style parser context wrapper around gsf input input. This signature will probably change to supply a SAX structure.

Note

This adds a reference to input.

Note

A simple wrapper around a cleaner implementation that will fold in when we add other api changes. Its not worth bumping just for this.

input :

GsfInput

Returns :

A parser context or NULL

gsf_xml_gvalue_from_str ()

gboolean            gsf_xml_gvalue_from_str             (GValue *res,
                                                         GType t,
                                                         char const *str);

Try to parse str as a value of type t into res.

res :

Result value

t :

Type of data

str :

Value string

Returns :

True when parsing of str as a value of type t was succesfull; false otherwise.

gsf_xmlDocFormatDump ()

int                 gsf_xmlDocFormatDump                (GsfOutput *output,
                                                         xmlDoc *cur,
                                                         char const *encoding,
                                                         gboolean format);

output :

cur :

encoding :

format :

Returns :

Property Details

The "pretty-print" property

  "pretty-print"             gboolean              : Read / Write

Should the output auto-indent elements to make reading easier.

Default value: TRUE