Bonjour,
On a une liste de nombres se trouvant dans une balise <coordonnes>. on a réussi à lire tout le contenu de cette balise avec xpath en codant en langage c. le problème qui se pose est que notre programme fait la lecture de la balise en tant que chaîne de caractère.cependant, on a besoin de récuperer ces données pas sous forme de chaîne de caractère(pas comme un gros bloc) mais en tant que nombres independant les uns des autres.
pouvez vous nous renseigner?
merci
fichier.xml
<proprietes>
<coordonnees>1 0 0 5 4 7 9 56 45 1 0 0 4 7 5 6 1</coordonnes>
<champ_principal>0 0 1</champ_principal>
</proprietes>
exemple1.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
int main() {
// Ouverture du document XML
xmlKeepBlanksDefault(0); // Ignore les noeuds texte composant la mise en forme
xmlDocPtr doc = xmlParseFile("exemple2.xml");
if (doc == NULL) {
fprintf(stderr, "Document XML invalide\n");
return EXIT_FAILURE;
}
// Initialisation de l'environnement XPath
xmlXPathInit();
// Création du contexte
xmlXPathContextPtr ctxt = xmlXPathNewContext(doc);
if (ctxt == NULL) {
fprintf(stderr, "Erreur lors de la création du contexte XPath\n");
return EXIT_FAILURE;
}
// Evaluation de l'expression XPath
xmlXPathObjectPtr xpathRes = xmlXPathEvalExpression("/proprietes/coordonnees/text()", ctxt);
if (xpathRes == NULL) {
fprintf(stderr, "Erreur sur l'expression XPath\n");
return EXIT_FAILURE;
}
// Manipulation du résultat
if (xpathRes->type == XPATH_NODESET) {
int i;
printf("coordonneest:\n");
for (i = 0; i < xpathRes->nodesetval->nodeNr; i++) {
xmlNodePtr n = xpathRes->nodesetval->nodeTab[i];
if (n->type == XML_TEXT_NODE || n->type == XML_CDATA_SECTION_NODE) {
printf("- %s\n", n->content);
}
}
}
xmlXPathFreeObject(xpathRes);
xmlXPathFreeContext(ctxt);
xmlFreeDoc(doc);
return EXIT_SUCCESS;
}
Partager