diff options
Diffstat (limited to 'src/common/xml.c')
-rw-r--r-- | src/common/xml.c | 99 |
1 files changed, 96 insertions, 3 deletions
diff --git a/src/common/xml.c b/src/common/xml.c index cbb7a41..0bd4d86 100644 --- a/src/common/xml.c +++ b/src/common/xml.c @@ -45,9 +45,8 @@ /****************************************************************************** * * -* Paramètres : filename = nom du fichier à ouvrir. * -* xdoc = structure XML chargée. [OUT] * -* context = contexte à utiliser pour les recherches. [OUT] * +* Paramètres : xdoc = structure XML chargée. [OUT] * +* context = contexte à utiliser pour les recherches. [OUT] * * * * Description : Crée un nouveau fichier XML. * * * @@ -79,6 +78,41 @@ bool create_new_xml_file(xmlDocPtr *xdoc, xmlXPathContextPtr *context) /****************************************************************************** * * +* Paramètres : content = données XML présentes en mémoire et à charge. * +* length = quantité de ces données. * +* xdoc = structure XML chargée. [OUT] * +* context = contexte à utiliser pour les recherches. [OUT] * +* * +* Description : Charge un document XML entièrement en mémoire. * +* * +* Retour : true si l'opération a pu s'effectuer, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool load_xml_from_memory(const char *content, size_t length, xmlDocPtr *xdoc, xmlXPathContextPtr *context) +{ + *xdoc = xmlReadMemory(content, length, "noname.xml", NULL, 0); + + if (*xdoc == NULL) + return false; + + *context = xmlXPathNewContext(*xdoc); + + if (*context == NULL) + { + xmlFreeDoc(*xdoc); + return false; + } + + return true; + +} + + +/****************************************************************************** +* * * Paramètres : xdoc = structure XML chargée. * * filename = nom du fichier à remplir. * * * @@ -217,6 +251,65 @@ xmlXPathObjectPtr get_node_xpath_object(xmlXPathContextPtr xpathCtx, const char * * * Paramètres : node = noeud dont une propriété est à lire. * * * +* Description : Obtient le nom de balise d'un noeud donné. * +* * +* Retour : Valeur sous forme de chaîne de caractères ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +char *qck_get_node_name(xmlNodePtr node) +{ + char *result; /* Valeur en question renvoyée */ + + result = NULL; + + if (node != NULL) + result = strdup((const char *)node->name); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : xpathCtx = contexte à utiliser pour les recherches. * +* path = chemin d'accès au noeud visé. * +* * +* Description : Obtient le nom de balise d'un noeud donné. * +* * +* Retour : Valeur sous forme de chaîne de caractères ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +char *get_node_name(xmlXPathContextPtr xpathCtx, const char *path) +{ + char *result; /* Valeur en question renvoyée */ + 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_name(xpathObj->nodesetval->nodeTab[0]); + + xmlXPathFreeObject(xpathObj); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : node = noeud dont une propriété est à lire. * +* * * Description : Obtient une valeur placée entre <...> et </...>. * * * * Retour : Valeur sous forme de chaîne de caractères ou NULL. * |