diff options
Diffstat (limited to 'src/common/xml.c')
-rw-r--r-- | src/common/xml.c | 107 |
1 files changed, 106 insertions, 1 deletions
diff --git a/src/common/xml.c b/src/common/xml.c index b89b4f9..eb450e0 100644 --- a/src/common/xml.c +++ b/src/common/xml.c @@ -26,6 +26,7 @@ #include <stdarg.h> +#include <stdio.h> #include <string.h> @@ -694,6 +695,60 @@ xmlNodePtr get_node_from_xpath(xmlXPathContextPtr context, const char *path) * Paramètres : xdoc = structure XML chargée. * * context = contexte à utiliser pour les recherches. * * path = chemin d'accès au noeud visé. * +* name = nom du nouveau noeud à créer. * +* * +* Description : Ajoute un noeud à un autre noeud. * +* * +* Retour : Adresse du noeud mis en place ou NULL en cas d'échec. * +* * +* Remarques : - * +* * +******************************************************************************/ + +xmlNodePtr add_node_to_xpath(xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *name) +{ + xmlNodePtr result; /* Noeud créé à retourner */ + xmlNodePtr parent; /* Support du nouveau noeud */ + + parent = get_node_from_xpath(context, path); + if (parent == NULL) return NULL; + + return add_node_to_node(xdoc, parent, name); + +} + + +/****************************************************************************** +* * +* Paramètres : xdoc = structure XML chargée. * +* parent = noeud parent de rattachement. * +* name = nom du nouveau noeud à créer. * +* * +* Description : Ajoute un noeud à un autre noeud. * +* * +* Retour : Adresse du noeud mis en place ou NULL en cas d'échec. * +* * +* Remarques : - * +* * +******************************************************************************/ + +xmlNodePtr add_node_to_node(xmlDocPtr xdoc, xmlNodePtr parent, const char *name) +{ + xmlNodePtr result; /* Noeud créé à retourner */ + + result = xmlNewDocNode(xdoc, NULL, BAD_CAST name, NULL); + result = xmlAddChild(parent, result); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : xdoc = structure XML chargée. * +* context = contexte à utiliser pour les recherches. * +* path = chemin d'accès au noeud visé. * * * * Description : S'assure qu'un noeud donné est bien présent dans le document.* * * @@ -802,8 +857,58 @@ bool add_content_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, const char node = ensure_node_exist(xdoc, context, path); if (node == NULL) return false; - xmlNodeSetContent(node, content); + xmlNodeSetContent(node, BAD_CAST content); return true; } + + +/****************************************************************************** +* * +* Paramètres : node = noeud dont le contenu est à mettre à jour. * +* name = nom de la propriété à créer. * +* value = chaîne de caractère à placer. * +* * +* Description : Ajoute une propriété à un noeud existant donné. * +* * +* Retour : true en cas de succès, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool add_string_attribute_to_node(xmlNodePtr node, const char *name, const char *value) +{ + xmlAttrPtr attrib; /* Attribut créé et en place */ + + attrib = xmlSetProp(node, BAD_CAST name, BAD_CAST value); + + return (attrib != NULL); + +} + + +/****************************************************************************** +* * +* Paramètres : node = noeud dont le contenu est à mettre à jour. * +* name = nom de la propriété à créer. * +* value = valeur numérique à placer. * +* * +* Description : Ajoute une propriété à un noeud existant donné. * +* * +* Retour : true en cas de succès, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool add_long_attribute_to_node(xmlNodePtr node, const char *name, long value) +{ + char tmp[11/*strlen("2147483647")*/]; /* Stockage temporaire */ + + snprintf(tmp, 11, "%ld", value); + + return add_string_attribute_to_node(node, name, tmp); + +} |