## EXMLHash

EXMLHash — Functions for manipulating xml as a hash table.

## Synopsis

    enum                EXmlHashType;
    GHashTable*         e_xml_to_hash                       (xmlDoc *doc,
                                                             EXmlHashType type);
    xmlDoc*             e_xml_from_hash                     (GHashTable *hash,
                                                             EXmlHashType type,
                                                             const char *root_node);
    void                e_xml_destroy_hash                  (GHashTable *hash);
    enum                EXmlHashStatus;
    void                (*EXmlHashFunc)                     (const char *key,
                                                             const char *value,
                                                             gpointer user_data);
    gboolean            (*EXmlHashRemoveFunc)               (const char *key,
                                                             const char *value,
                                                             gpointer user_data);
    typedef             EXmlHash;
    EXmlHash*           e_xmlhash_new                       (const char *filename);
    void                e_xmlhash_add                       (EXmlHash *hash,
                                                             const char *key,
                                                             const char *data);
    void                e_xmlhash_remove                    (EXmlHash *hash,
                                                             const char *key);
    EXmlHashStatus      e_xmlhash_compare                   (EXmlHash *hash,
                                                             const char *key,
                                                             const char *compare_data);
    void                e_xmlhash_foreach_key               (EXmlHash *hash,
                                                             EXmlHashFunc func,
                                                             gpointer user_data);
    void                e_xmlhash_foreach_key_remove        (EXmlHash *hash,
                                                             EXmlHashRemoveFunc func,
                                                             gpointer user_data);
    void                e_xmlhash_write                     (EXmlHash *hash);
    void                e_xmlhash_destroy                   (EXmlHash *hash);

## Description

## Details

### enum EXmlHashType

    typedef enum {
    	E_XML_HASH_TYPE_OBJECT_UID,
    	E_XML_HASH_TYPE_PROPERTY
    } EXmlHashType;

`E_XML_HASH_TYPE_OBJECT_UID` | Use the object UID as the hash key.
`E_XML_HASH_TYPE_PROPERTY` | Use the property name as the hash key.

### e_xml_to_hash ()

    GHashTable*         e_xml_to_hash                       (xmlDoc *doc,
                                                             EXmlHashType type);

Creates a GHashTable representation of the xmlDoc `doc`. If `type` is * `E_XML_HASH_TYPE_PROPERTY`, all XML nodes will be indexed in the GHashTable by name. If `type` is `E_XML_HASH_TYPE_OBJECT_UID`, then XML objects will be indexed in the hash by their UID (other nodes will still be indexed by name).

`doc` : | The xmlDoc to store in a hash table.
`type` : | The value type to use as a key in the hash table.
Returns : | The newly-created GHashTable representation of `doc`.

### e_xml_from_hash ()

    xmlDoc*             e_xml_from_hash                     (GHashTable *hash,
                                                             EXmlHashType type,
                                                             const char *root_node);

Uses the key/value pair representation of an XML structure in `hash` to build an equivalent xmlDoc. This is the reverse of `e_xml_to_hash()`.

`hash` : | The GHashTable to extract the XML from.
`type` : | The EXmlHashType used to store the XML.
`root_node` : |
Returns : | The xmlDoc created from the data in `hash`.

### e_xml_destroy_hash ()

    void                e_xml_destroy_hash                  (GHashTable *hash);

Frees the memory used by `hash` and its contents.

`hash` : | The GHashTable to destroy.

### enum EXmlHashStatus

    typedef enum {
    	E_XMLHASH_STATUS_SAME,
    	E_XMLHASH_STATUS_DIFFERENT,
    	E_XMLHASH_STATUS_NOT_FOUND
    } EXmlHashStatus;

`E_XMLHASH_STATUS_SAME` | The compared values are the same.
`E_XMLHASH_STATUS_DIFFERENT` | The compared values are different.
`E_XMLHASH_STATUS_NOT_FOUND` | The key to compare against was not found.

### EXmlHashFunc ()

    void                (*EXmlHashFunc)                     (const char *key,
                                                             const char *value,
                                                             gpointer user_data);

`key` : |
`value` : |
`user_data` : |

### EXmlHashRemoveFunc ()

    gboolean            (*EXmlHashRemoveFunc)               (const char *key,
                                                             const char *value,
                                                             gpointer user_data);

`key` : |
`value` : |
`user_data` : |
Returns : |

### EXmlHash

    typedef struct EXmlHash EXmlHash;

A hash table representation of an XML file.

### e_xmlhash_new ()

    EXmlHash*           e_xmlhash_new                       (const char *filename);

Creates a new EXmlHash from the file `filename`. If `filename` does not already exist, an empty EXmlHash will be created.

`filename` : | The name of an XML file.
Returns : | The new EXmlHash structure, or `NULL` if unable to parse `filename`.

### e_xmlhash_add ()

    void                e_xmlhash_add                       (EXmlHash *hash,
                                                             const char *key,
                                                             const char *data);

Adds a new key/value pair to the EXmlHash `hash`.

`hash` : | The EXmlHash to add an entry to.
`key` : | The key to use for the entry.
`data` : | The value of the new entry.

### e_xmlhash_remove ()

    void                e_xmlhash_remove                    (EXmlHash *hash,
                                                             const char *key);

Remove the entry in `hash` with key equal to `key`, if it exists.

`hash` : | The EXmlHash to remove an entry from.
`key` : | The key of the entry to remove.

### e_xmlhash_compare ()

    EXmlHashStatus      e_xmlhash_compare                   (EXmlHash *hash,
                                                             const char *key,
                                                             const char *compare_data);

Compares the value with key equal to `key` in `hash` against `compare_data`.

`hash` : | The EXmlHash to compare against.
`key` : | The key of the hash entry to compare with.
`compare_data` : | The data to compare against the hash entry.
Returns : | E_XMLHASH_STATUS_SAME if the value and `compare_data` are equal,E_XMLHASH_STATUS_DIFFERENT if they are different, or E_XMLHASH_STATUS_NOT_FOUND if there is no entry in `hash` with its key equal to `key`.

### e_xmlhash_foreach_key ()

    void                e_xmlhash_foreach_key               (EXmlHash *hash,
                                                             EXmlHashFunc func,
                                                             gpointer user_data);

Executes `func` against each key/value pair in `hash`.

`hash` : | An EXmlHash.
`func` : | The EXmlHashFunc to execute on the data in `hash`.
`user_data` : | The data to pass to `func`.

### e_xmlhash_foreach_key_remove ()

    void                e_xmlhash_foreach_key_remove        (EXmlHash *hash,
                                                             EXmlHashRemoveFunc func,
                                                             gpointer user_data);

`hash` : |
`func` : |
`user_data` : |

### e_xmlhash_write ()

    void                e_xmlhash_write                     (EXmlHash *hash);

Writes the XML represented by `hash` to the file originally passed to `e_xmlhash_new()`.

`hash` : | The EXmlHash to write.

### e_xmlhash_destroy ()

    void                e_xmlhash_destroy                   (EXmlHash *hash);

Frees the memory associated with `hash`.

`hash` : | The EXmlHash to destroy.