diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/xml.c | 108 | ||||
-rw-r--r-- | src/common/xml.h | 11 |
2 files changed, 113 insertions, 6 deletions
diff --git a/src/common/xml.c b/src/common/xml.c index 1e2871b..a9c65b5 100644 --- a/src/common/xml.c +++ b/src/common/xml.c @@ -27,6 +27,7 @@ #include <stdarg.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> @@ -322,6 +323,43 @@ char *qck_get_node_prop_value(xmlNodePtr node, const char *name) /****************************************************************************** * * +* Paramètres : node = noeud dont une propriété est à lire. * +* name = nom de la propriété à lire. * +* out = valeur entière lue depuis le contenu textuel. [OUT] * +* * +* Description : Obtient la valeur entière d'une propriété d'un élément. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool qck_get_node_prop_long_value(xmlNodePtr node, const char *name, long *out) +{ + bool result; /* Bilan à retourner */ + char *value; /* Valeur brute lue */ + + value = qck_get_node_prop_value(node, name); + + if (value) + { + result = true; + + *out = strtol(value, NULL, 10); + free(value); + + } + else + result = false; + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : xpathCtx = contexte à utiliser pour les recherches. * * path = chemin d'accès au noeud à traiter. * * name = nom de la propriété à lire. * @@ -356,6 +394,41 @@ char *get_node_prop_value(xmlXPathContextPtr xpathCtx, const char *path, const c /****************************************************************************** * * +* Paramètres : xpathCtx = contexte à utiliser pour les recherches. * +* path = chemin d'accès au noeud à traiter. * +* name = nom de la propriété à lire. * +* out = valeur entière obtenue via contenu textuel. [OUT] * +* * +* Description : Obtient la valeur entière d'une propriété d'un élément. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool get_node_prop_long_value(xmlXPathContextPtr xpathCtx, const char *path, const char *name, long *out) +{ + bool result; /* Bilan à retourner */ + xmlXPathObjectPtr xpathObj; /* Point de départ XML */ + + result = NULL; + + xpathObj = get_node_xpath_object(xpathCtx, path); + if (xpathObj == NULL) return NULL; + + if (xpathObj->nodesetval->nodeNr > 0) + result = qck_get_node_prop_long_value(xpathObj->nodesetval->nodeTab[0], name, out); + + xmlXPathFreeObject(xpathObj); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : node = noeud de texte avec un lien avec le document XML. * * * * Description : Construit un chemin d'accès complet selon le fichier XML. * @@ -965,16 +1038,13 @@ bool _add_string_attribute_to_node(xmlNodePtr node, const char *name, const char bool add_string_attribute_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *name, const char *value) { xmlNodePtr node; /* Noeud à modifier */ - xmlAttrPtr attrib; /* Attribut créé et en place */ if (value == NULL) return true; node = ensure_node_exist(xdoc, context, path); if (node == NULL) return false; - attrib = xmlSetProp(node, BAD_CAST name, BAD_CAST value); - - return (attrib != NULL); + return _add_string_attribute_to_node(node, name, value); } @@ -993,7 +1063,7 @@ bool add_string_attribute_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, co * * ******************************************************************************/ -bool add_long_attribute_to_node(xmlNodePtr node, const char *name, long value) +bool _add_long_attribute_to_node(xmlNodePtr node, const char *name, long value) { char tmp[11/*strlen("2147483647")*/]; /* Stockage temporaire */ @@ -1002,3 +1072,31 @@ bool add_long_attribute_to_node(xmlNodePtr node, const char *name, long value) return _add_string_attribute_to_node(node, name, tmp); } + + +/****************************************************************************** +* * +* Paramètres : xdoc = structure XML chargée. * +* context = contexte à utiliser pour les recherches. * +* path = chemin d'accès au noeud visé. * +* 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(xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *name, long value) +{ + xmlNodePtr node; /* Noeud à modifier */ + + node = ensure_node_exist(xdoc, context, path); + if (node == NULL) return false; + + return _add_long_attribute_to_node(node, name, value); + +} diff --git a/src/common/xml.h b/src/common/xml.h index 8cb8c0e..60891f7 100644 --- a/src/common/xml.h +++ b/src/common/xml.h @@ -68,9 +68,15 @@ char *get_node_text_value(xmlXPathContextPtr, const char *); /* Obtient la valeur d'une propriété d'un élément. */ char *qck_get_node_prop_value(xmlNodePtr, const char *); +/* Obtient la valeur entière d'une propriété d'un élément. */ +bool qck_get_node_prop_long_value(xmlNodePtr, const char *, long *); + /* Obtient la valeur d'une propriété d'un élément. */ char *get_node_prop_value(xmlXPathContextPtr, const char *, const char *); +/* Obtient la valeur entière d'une propriété d'un élément. */ +bool get_node_prop_long_value(xmlXPathContextPtr, const char *, const char *, long *); + /* Construit un chemin d'accès complet selon le fichier XML. */ char *qck_build_filename_with_doc_url(xmlNodePtr); @@ -133,7 +139,10 @@ bool _add_string_attribute_to_node(xmlNodePtr, const char *, const char *); bool add_string_attribute_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *, const char *); /* Ajoute une propriété à un noeud existant donné. */ -bool add_long_attribute_to_node(xmlNodePtr, const char *, long); +bool _add_long_attribute_to_node(xmlNodePtr, const char *, long); + +/* Ajoute une propriété à un noeud existant donné. */ +bool add_long_attribute_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *, long); |