Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1718 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Compilation parser XML pour intégration à un code C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compilation parser XML pour intégration à un code C

n°2127022
froz
Posté le 18-02-2012 à 12:46:19  profilanswer
 

Bonjour à tous,
 
Je cherche un moyen simple et efficace de lire un fichier XML dans un fichier C et d'en récupérer les données pour les retraiter.
J'ai déja fait beaucoup de recherches sans résultat.
Je m'explique:
Je suis sous linux.
J'ai essayé à plusieurs reprises d'installer des librairies comme libxml, exapat ... etc
Lorsque je les utilise dans mon programme C, ça ne fonctionne pas.
J'ai ce type d'erreur avec libxml "error xmlChar* libxml/xmlstring.h" lorsque j'utilise le fichier parser.h avec la commande #include <libxml/parser.h> (je pense que parser.h fait appel à xmlstring.h).
 
Enfin bref, existe-t-il des librairies pré-intégrées qui permettent de lire un XML ?
Avez vous des exemples de codes ?
Je sais qu'en programmation java, il me suffisait juste de faire "import javax.xml.xpath.*" pour obtenir les librairies et apres je concevais mon code facilement avec Xpath, sous la forme suivante:
 
public static void main(String[] args) {
 

DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new File("/monfichier.xml" ));
XPath xpath=javax.xml.xpath.XPathFactory.newInstance().newXPath();
NodeList nl = (NodeList)xpath.evaluate("//instance", doc,XPathConstants.NODESET);
for(int i=0;i<nl.getLength();i++)
{
System.out.println(((Element)nl.item(i)).getAttribute("name" ));
}
System.out.println("end "+doc.getFirstChild().getNodeName());
}
catch(Exception err)
{
System.out.println("erreur: "+err.getMessage());
}
 
 
}

 
 
En vous remerciant par avance pour votre aide qui me sera préciseuse
 
Froz


Message édité par froz le 18-02-2012 à 19:35:21
mood
Publicité
Posté le 18-02-2012 à 12:46:19  profilanswer
 

n°2127034
froz
Posté le 18-02-2012 à 16:06:12  profilanswer
 

Personne ne sait lire un fichier XML en C ?

n°2127049
froz
Posté le 18-02-2012 à 18:28:24  profilanswer
 

Voila, je pense que mon pb vient du fait qu'il est nécessaire d'écrire le chemin des librairies pendant la compilation. Je reformule donc mes questions:
-Existe-t-il des bibliothèques permettant de lire un fichier XML sans indiquer le chemin de ces bibliotheques lors de la compilation, en C ?
-Si non, avez-vous des solutions me permettant de récupérer des informations d'un fichier XML pour les post-traiter dans un programme C ? (je sais qu'avec java, il est possible d'extraire des données XML avec XPath)

n°2127051
gilou
Modérateur
Modzilla
Posté le 18-02-2012 à 18:43:54  profilanswer
 

Si tu ne veux pas de librairies, rien ne t’empêche de prendre le code source de expat et le linker directement avec ton code, je l'ai déjà fait il y a quelques années, c'est pas bien difficile.
Plus proche de ce que fait java, tu as la version C++ de Xerces que tu peux employer et qui a sauf erreur de ma part une API C.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2127052
froz
Posté le 18-02-2012 à 18:47:48  profilanswer
 

C'est une solution intéressante. Je dois en déduire qu'il faut forcemment des librairies pour lire un fichier XML ?
 
Sinon, j'ai bien compris ton idée,  mais je suis un petit débutant dans tout ça. Le code source de expat se trouve ou ? Car dans le dossier "lib" de expat, il y a 33 fichiers .... ^^

n°2127053
gilou
Modérateur
Modzilla
Posté le 18-02-2012 à 18:56:07  profilanswer
 

Lesquels constituent le source de expat.
Tu dois compiler expat comme une librairie, puis tu linke cette librairie à ton code.
 

Citation :

Je dois en déduire qu'il faut forcemment des librairies pour lire un fichier XML ?


Ce qui n'a rien d'étonnant. Tu en as aussi besoin avec java, tu ne fais pas autre chose en mettant une déclaration import.
La seule différence, c'est que la librairie est avec l'interpréteur java, alors que la elle sera directement dans ton code.
 

Citation :

Existe-t-il des bibliothèques permettant de lire un fichier XML sans indiquer le chemin de ces bibliotheques lors de la compilation, en C ?

On doit toujours donner les paths des fichier .h et des librairie au compilateur afin qu'il sache ou les retrouver. Sous linux c'est configuré dans le makefile en général, ou bien dans des variables d'environnement.
 
A+,


Message édité par gilou le 18-02-2012 à 18:59:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2127054
froz
Posté le 18-02-2012 à 19:01:07  profilanswer
 

Merci pour tous ces renseignements.
 
Pardonne ma méconnaissance mais, pourrais tu me préciser comment faire cette manipulation "Tu dois compiler expat comme une librairie, puis tu linke cette librairie à ton code. "

n°2127059
Anonymouse
Posté le 18-02-2012 à 19:39:41  profilanswer
 

froz a écrit :

Merci pour tous ces renseignements.
 
Pardonne ma méconnaissance mais, pourrais tu me préciser comment faire cette manipulation "Tu dois compiler expat comme une librairie, puis tu linke cette librairie à ton code. "


 
-dl les sources d'expat
-Executer le script ./configure
-make
-De base expat ne se compile pas en bibliothèque (Dans mon souvenir)
-Un solution un peu cracra est de compiler en lui passant les .o générés par expat
 
Exemple : gcc -Wall -ansi test.c ./expat-2.0.1/lib/*.o -o Test.exe


Message édité par Anonymouse le 18-02-2012 à 19:40:33
n°2127061
froz
Posté le 18-02-2012 à 19:47:08  profilanswer
 

Si je fais ça, je vais créer un fichier test.exe avec le code de test.c et les librairies de expat. Or le but est d'avoir un code C (par exemple test.C) qui peut lire un XML sans avoir besoin du chemin de expat lorsque je l'execute.

n°2127064
Anonymouse
Posté le 18-02-2012 à 19:57:07  profilanswer
 

froz a écrit :

Si je fais ça, je vais créer un fichier test.exe avec le code de test.c et les librairies de expat. Or le but est d'avoir un code C (par exemple test.C) qui peut lire un XML sans avoir besoin du chemin de expat lorsque je l'execute.


 
Non
Tu devrais (re)lire des cours de compilation...


Message édité par Anonymouse le 18-02-2012 à 19:57:22
mood
Publicité
Posté le 18-02-2012 à 19:57:07  profilanswer
 

n°2127065
froz
Posté le 18-02-2012 à 20:01:45  profilanswer
 

;) désolé.
Qu'est ce qui doit se trouverdans mon fichier test.c ??

n°2127066
gilou
Modérateur
Modzilla
Posté le 18-02-2012 à 20:29:29  profilanswer
 

froz a écrit :

Si je fais ça, je vais créer un fichier test.exe avec le code de test.c et les librairies de expat. Or le but est d'avoir un code C (par exemple test.C) qui peut lire un XML sans avoir besoin du chemin de expat lorsque je l'execute.

Mais il en aura pas besoin: linker avec une librairie (en statique), c'est incorporer directement dans l’exécutable le code de la librairie.
A+,


Message édité par gilou le 18-02-2012 à 20:30:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2127069
froz
Posté le 18-02-2012 à 20:41:16  profilanswer
 

Gilou, pourrais-tu s'il te plaît me préciser de façon détaillée la méthode à suivre ? Je suis un peu perdu ;)

n°2127091
froz
Posté le 19-02-2012 à 01:42:51  profilanswer
 

Voila, j'ai fait quelques modifications. Pour pouvoir compiler le programme sans donner les liens vers la bibliotheque, j'ai transformé les #include <libxml/FICHIER.h> en #include "FICHIER.h" et j'ai positionné les fichiers dans le meme répertoire que mon programme principale en C. Quand je compile, je n'obtiens plus d'erreur de librairie mais ce genre de chose.
Qu'en pensez-vous ?
Est-ce possible de compiler de cette façon ?  
Pourquoi ai-je ces erreurs ?
 
froz@ubuntu:~/test$ gcc -o test test.c  
/tmp/cc1cHvGJ.o: In function `main':
test.c:(.text+0x11): undefined reference to `xmlParseFile'
test.c:(.text+0x57): undefined reference to `xmlDocGetRootElement'
test.c:(.text+0x96): undefined reference to `xmlFreeDoc'
test.c:(.text+0xc1): undefined reference to `xmlFreeDoc'
collect2: ld a retourné 1 code d'état d'exécution

n°2127092
gilou
Modérateur
Modzilla
Posté le 19-02-2012 à 01:47:05  profilanswer
 

Non mais tu as déjà écrit un programme C ou pas? c'est le b.a. ba, ça
Il y a aucune technique spéciale à employer, si tu linkes en statique avec la librairie, elle sera mise dans l’exécutable, et les appels aux fonctions de la librairies dans ton code principal marcheront (c'est le boulot du linker de faire ça).
http://fr.wikipedia.org/wiki/%C3%89dition_de_liens
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2127093
froz
Posté le 19-02-2012 à 01:55:31  profilanswer
 

J'ai bien compris, mais je dois laisser mon fichier sour la forme  XXX.C et pas le transformer en executable pour l'utiliser. Sinon, ça serait trop simple ;)

Message cité 1 fois
Message édité par froz le 19-02-2012 à 01:55:52
n°2127094
gilou
Modérateur
Modzilla
Posté le 19-02-2012 à 01:57:00  profilanswer
 

Citation :

Voila, j'ai fait quelques modifications. Pour pouvoir compiler le programme sans donner les liens vers la bibliotheque, j'ai transformé les #include <libxml/FICHIER.h> en #include "FICHIER.h" et j'ai positionné les fichiers dans le meme répertoire que mon programme principale en C. Quand je compile, je n'obtiens plus d'erreur de librairie mais ce genre de chose.

En fait si, c'est une erreur de librairie: à l'édition de lien, le linker ne trouve pas le code des fonctions de la librairie que tu utilises, et c'est ce qu'il indique comme erreur. Il faut lui passer un argument avec -l: -ltoto lui dit de chercher dans une librairie nommée libtoto.lib (ou libtoto, je sais plus comment c'est sous linux)
>> gcc -o test test.c  
Faudra au minimum faire gcc -o test test.c -lexpat  (en supposant que la librairie est nommée libexpat.lib ou libexpat) pour que ça marche et avoir aussi libexpat (?.lib) dans ton répertoire
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2127095
gilou
Modérateur
Modzilla
Posté le 19-02-2012 à 01:57:39  profilanswer
 

froz a écrit :

J'ai bien compris, mais je dois laisser mon fichier sour la forme  XXX.C et pas le transformer en executable pour l'utiliser. Sinon, ça serait trop simple ;)

Rien compris, la. Si tu as pas au final un exécutable, il y a peu de chances que tu accèdes aux fonctions de expat.
A+,


Message édité par gilou le 19-02-2012 à 01:58:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2127096
froz
Posté le 19-02-2012 à 02:04:38  profilanswer
 

Justement, c'est bien ça le probleme. J'ai besoin que mon XML soit lu pendant la lecture du fichier.C et ce, sans avoir la possibilité de mettre un argument permettant d'identifier le chemin de la bibliotheque.
En gros, il faut que, si je tape  
gcc -o test test.c
le XML soit lu, les données sont récupérées puis traitées

n°2127097
froz
Posté le 19-02-2012 à 02:05:02  profilanswer
 

(je ne sais pas si je suis très clair)

n°2127098
gilou
Modérateur
Modzilla
Posté le 19-02-2012 à 02:16:27  profilanswer
 

Citation :

En gros, il faut que, si je tape  
gcc -o test test.c  
le XML soit lu, les données sont récupérées puis traitées

Ca c'est rigoureusement impossible. Un compilateur compile, mais il n'en fait pas plus, et il n'exécutera pas le programme compilé.
Tu confonds manifestement les langages interprétés et les langages compilés.
D'ailleurs puisque tu connais java, avec java non plus tu pourrais pas faire ça:
javac test.java ça va pas exécuter le programme, juste le compiler en langage intermédiaire.
A+,


Message édité par gilou le 19-02-2012 à 02:48:00

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Compilation parser XML pour intégration à un code C

 

Sujets relatifs
Problème de lecture du CSS sous IEintégrer .lib dans un projet C# (VS Express 2010)
Script de suppresion de fichier temporairetrier un fichier texte
Script batch vérification fichier txtbesoin d'aide en C
C++ : Jeu Damier (aide)[VB/VBA/VBS] Loader Saver XML
Comment peut on instancier un fichier .cs??Programmation en C
Plus de sujets relatifs à : Compilation parser XML pour intégration à un code C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR