Retourner aux forums || Retourner au forum Programmation.c
Programmation.c : code pour faire du xpath avec du xml en C
Posté par Gilles Crebassa (page perso, ) le 31 août 2004J'ai un xml avec lequel je voudrais faire du XPath pour recupérer seulement les infos qui m'interesse. J'ai essayer libxml2 mais ca me parait vraiment gros pour faire un truc tout simple. J'utilise déjà expath.
Merci pour toutes suggestions.
> Lire le message (9 commentaires, moyenne: 1).
exemple libxml2/xpath
L'exemple http://xmlsoft.org/examples/xpath1.c(...) fait 250 lignes, oui, mais tu n'as peut-être pas besoin de tout cela. Déjà, si ton XML n'utilise pas de namespace, ça raccourcit de beaucoup.
Quelque chose minimaliste, qui parse t.xml et affiche les noeuds "matchant" l'expression xpath "//elem" pourrait ressembler à: (il faut quand même y ajouter une petite gestion des erreurs)
#include <libxml/tree.h>
#include <libxml/xpath.h>
int main(int argc, char *argv[])
{
xmlDoc *doc;
xmlXPathContext *ctx;
xmlXPathObject *xpathObj;
xmlNode *node;
int i, n;
doc = xmlParseFile("t.xml");
ctx = xmlXPathNewContext(doc);
xpathObj = xmlXPathEvalExpression("//elem", ctx);
n = xpathObj->nodesetval->nodeNr;
for (i=0; i<n; i++) {
node = xpathObj->nodesetval->nodeTab[i];
printf("node: %s\n", node->name);
}
return 0;
}
Compile rapide avec gcc t.c -o t `pkg-config --cflags --libs libxml-2.0`
-
[^]Re: exemple libxml2/xpath
Posté par Gilles Crebassa (page perso, ) le 01/09/2004 à 06:46. (lien). Évalué à 1.j'ai bien tester les deux exemples mais j'ai juste
node:elem
node:elem
mais il me faudrait le tags à l'ouverture jusqu'a la fermeture avec le "<elem>blablablalbla</elem>"
Le truc est que ca fait une librairie de 2 Mo pour juste 15 lignes de code et je trouve que c'est trop.
Je cherche juste une source qui fait XPath avec un xml que je donne et l'expression.
J'ai bien essayer de récuperer seulement XPath de libxml2 mais tous est lier l'un dans l'autres.-
[^]Re: exemple libxml2/xpath
Posté par Nicolas ANTONIAZZI (page perso, ) le 01/09/2004 à 07:00. (lien). Évalué à 0.Il y a aussi cette lib qui fait la meme chose que libXML...
Je ne sais pas quelle taille elle fait, mais ca peut peut etre etre mieux :
http://xml.apache.org/xerces-c/index.html(...)-
[^]Re: exemple libxml2/xpath
Posté par Gilles Crebassa (page perso, ) le 01/09/2004 à 08:12. (lien). Évalué à 1.oui,mais c'est du c++ et non du language c pur
-
[^]Re: exemple libxml2/xpath
Posté par Gilles Crebassa (page perso, ) le 01/09/2004 à 08:59. (lien). Évalué à 1.c'est malheureusement du c++ et non du c
-
-
[^]Re: exemple libxml2/xpath
Posté par Frédéric Péters (page perso, ) le 01/09/2004 à 10:20. (lien). Évalué à 1.Sûr, mais quand tu as un xmlNode*; tu fais ce que tu veux avec. Tu peux par exemple appeler xmlElemDump (http://xmlsoft.org/html/libxml-tree.html#xmlElemDump(...))
En gros, remplace le printf par xmlElemDump(stdout, doc, node);
et tu recevras <elem>toto</elem>...
Et sur la taille de la libxml2, elle ne fait même pas 1 méga chez moi; l'xml, l'xpath, ça a l'air simple comme ça, mais enfonce-toi dans la gestion des namespaces, de l'encodage... et tu verras que libxml2 n'est pas énorme et fait du très bon boulot.-
[^]Re: exemple libxml2/xpath
Posté par Gilles Crebassa (page perso, ) le 01/09/2004 à 11:37. (lien). Évalué à 1.Super, la fonction, j'avais essayer de rechercher les infos à la main. La doc n'est pas encore trés clair pour moi !
ls -l libxml2*
2468499 Jun 25 10:30 libxml2.a
je suis sous AIX.
De plus, si je comprends bien, cette librairie fait la même choses aussi que expath ?-
[^]Re: exemple libxml2/xpath
Posté par Frédéric Péters (page perso, ) le 01/09/2004 à 15:45. (lien). Évalué à 1.Évidemment, en statique, c'est gros:
$ ls -l /usr/lib/libxml2.a
-rw-r--r-- 1 root root 4312504 2004-08-01 02:15 /usr/lib/libxml2.a
libxml2 fait bien plus que expat. Expat ne fournit qu'un parser de type SAX; libxml2 fournit SAX, DOM et un support XPath.-
[^]Re: exemple libxml2/xpath
Posté par Gilles Crebassa (page perso, ) le 02/09/2004 à 09:48. (lien). Évalué à 1.Il y aurait une doc avec exemple complet en francais quelque part ?
-
-
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.