summaryrefslogtreecommitdiff
path: root/src/common/xml.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-03-19 13:02:54 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-03-19 13:02:54 (GMT)
commit94fd405bb0c2e6dfa43324b04a336ffb611c58ce (patch)
treef3170587b4006fa358665a6bbfa301731503d3b3 /src/common/xml.c
parent499f00977cd7f50ce0c4cf24dd59b1e920e5b180 (diff)
Provided initial features for debugging using GDB.
Diffstat (limited to 'src/common/xml.c')
-rw-r--r--src/common/xml.c99
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. *