XML Parser

XML Parser - XML/XSL - Programmation

Marsh Posté le 10-09-2008 à 11:50:07    

bonjour tmd,
Est ce qu'il y'a une bibliothèque en C++ qui utilise SAX pour parser un fichier XML,et n'utilise pas la méthode DOM pour le modifier en fait n'utilise pas une méthode lourd au niveau mémoire pour le modifier?

Reply

Marsh Posté le 10-09-2008 à 11:50:07   

Reply

Marsh Posté le 10-09-2008 à 13:35:42    

Expat. C'est en C, mais il y a un wrapper C++.
Orienté stream, donc léger.
Mais quand tu parles de modifs du XML, a quelle type de modifs penses tu?
A+,


Message édité par gilou le 10-09-2008 à 13:36:34

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-09-2008 à 14:11:37    

Mercis gilou :wahoo:  
Par exemple je veux modifier  la valeur/le nom d’un élément ou d’une attribut.  
 

Reply

Marsh Posté le 10-09-2008 à 19:29:48    

Facile avec expat, ca.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 11:14:53    

C’est juste,expat permis de modifier un fichier xml :) .
Est ce que vous pouvez me dire la méthode utilisé pour ça ?
Est-ce que expat chrage la totalité de fichier puis il le modifie et après il écrase le fichier précèdent ou bien il fais une écriture séquentiel ou bien comment ? surtout que j'ai une contrainte de mémoire :sweat: .

Reply

Marsh Posté le 11-09-2008 à 11:36:21    

Expat ne charge rien du tout et ne modifie rien du tout:
Il lit un fichier (donc ca prends en mémoire la taille d'un buffer), et parse le fichier.
Pour chaque token reconnu, il appelle une fonction de callback.
Et c'est tout.
C'est a toi d'ecrire le driver, c'est a dire le contenu des fonctions de callback.
Pour démarrer, écris un driver qui va pondre en sortie (avec des printf par exemple) ce qui est lu dans le fichier en entrée, puis modifie en fonction de tes besoins.
C'est assez simple a faire, et il doit y avoir des exemples dans la doc.
En général, sous windows, tu compiles expat comme une dll que ton code principal, avec le driver, appelle.
Ca bouffe peu de mémoire, c'est un des parseurs les plus légers (en empreinte mémoire) qu'on puisse employer.
A+,


Message édité par gilou le 11-09-2008 à 11:38:54

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 11:49:10    

Notes que expat ne gère que le XML encodé dans les encodages suivants:
utf-8        (Unicode en UTF-8)
utf-16       (Unicode en UTF-16)
iso-8859-1 (Isolatin 1)
us-ascii     (ASCII)
Ca couvre l'essentiel des cas de figure, mais si tu as besoin de parser des documents dans un encodage peu courant (Isolatin 3,4... ou encodages japonais chinois coréens...), il faudra soit coder des tables spécifiques a la main (c'est faisable avec expat, je l'ai fait, mais je ne le recommande pas), soit transcoder ton fichier en unicode avant de le fournir a expat [l'emploi de la librairie ICU de IBM est alors recommandé, la aussi sous forme de dll, mais ca bouffe une place mémoire certaine].
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 11:53:55    

Oui,c’est a moi d’écrire le driver, mercis gilou :) .
J’ai trouver aussi la bip xerces qui implémente plusieurs  méthode (DOM, SAX, SAX2) est ce que vous connaissez  comment elle fait pour modifier un fichier parsé avec SAX ?  

Reply

Marsh Posté le 11-09-2008 à 12:20:33    

Xerces, ce n'est pas léger en mémoire, hein.
A priori, le parseur interne fonctionne sur un modele DOM (chargement du tout en mémoire, construction d'un arbre DOM, etc)
Il me semble que l'interface SAX consiste a parcourir l'arbre DOM et a générer des évènements SAX au fur et a mesure.
 
Si tu veux verifier la conformité du XML par rapport a une DTD, par contre, Xerces est supérieur a expat (qui est capable de décoder les erreurs de conformité par rapport a une DTD, mais n'est pas capable de détecter si la DTD elle même est correcte [il ne sait pas détecter si les modèles de contenu sont ambigus ou non]).
Mais si tu n'as pas de DTD (ou bien si tu as une DTD dont tu as par ailleurs vérifié la validité) et ne fais que parser du XML bien-formé, expat est assez adapté.
Si tu as non pas une DTD mais un XML-schema, un outil comme Xerces est alors plus adapté.  
A+,


Message édité par gilou le 11-09-2008 à 12:32:19

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 12:30:24    

Donc xerces utilise SAX juste pour la lecture, et pour la modification il charge tout le fichier en mémoire sous une structure arbre, c’est vraiment terrible au niveau mémoire :pfff: .
J’ai trouvé une autre qui s’appelle Irrxml intégrer dans la SDK d’Irrlicht (moteur de jeu) mais c’est toujours a toi d’implémenter un algorithme de modification.  
Mercis beaucoup gilou :p .  

Reply

Marsh Posté le 11-09-2008 à 12:30:24   

Reply

Marsh Posté le 11-09-2008 à 12:36:44    

tubi a écrit :

Donc xerces utilise SAX juste pour la lecture, et pour la modification il charge tout le fichier en mémoire sous une structure arbre, c’est vraiment terrible au niveau mémoire :pfff: .
J’ai trouvé une autre qui s’appelle Irrxml intégrer dans la SDK d’Irrlicht (moteur de jeu) mais c’est toujours a toi d’implémenter un algorithme de modification.  
Mercis beaucoup gilou :p .  

Non, Xerces n'utilise pas SAX pour la lecture. Il a un parser plus complexe que SAX et différent. Il charge systématiquement un arbre interne en mémoire, sauf erreur de ma part (Bon, ca fait plus de deux ans que j'ai pas été voir le code, mais les principes de bases n'ont pas du trop bouger).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 12:40:21    

tubi a écrit :

Donc xerces utilise SAX juste pour la lecture, et pour la modification il charge tout le fichier en mémoire sous une structure arbre, c’est vraiment terrible au niveau mémoire :pfff: .Mercis beaucoup gilou :p .  

Des que tu veux faire des choses compliquées en XML, tu as besoin de passer par une structure arborescente en mémoire, donc c'est pas illogique.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 13:37:43    

Citation :

Non, Xerces n'utilise pas SAX pour la lecture. Il a un parser plus complexe que SAX et différent.


 
Mais j’ai déjà téléchargé xerces et j’ai trouvé qu’elle implémente SAX et SAX2


Message édité par tubi le 11-09-2008 à 13:38:07
Reply

Marsh Posté le 11-09-2008 à 14:08:54    

Oui, il implemente une interface SAX, mais comme je t'ai dit, je ne suis pas sur qu'il ne construise pas néanmoins un arbre interne, même en mode SAX.
Il faudra que tu regardes l'empreinte mémoire (déja assez importante avec xerces).
Expat a une toute petite taille mémoire et est beaucoup plus facile a utiliser que Xerces, mais bon, tu fais comme tu veux, hein...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-09-2008 à 14:40:33    

Bon, :bounce:  j’ai réussi à utiliser Irrxml pour modifier un fichier xml.
C’est vraiment gentil de votre part gilou :jap: .


Message édité par tubi le 11-09-2008 à 14:41:14
Reply

Marsh Posté le 28-10-2008 à 10:33:21    

bjr,j aimerais savoir si SML et XML st pareils,et si ce st des languages ou logiciel,
j ais une conaissance a moi ki programme ds ALice et utilise le language SML
j aimerais avoir des cours pr debutan via net a propo de cela
merci d avance

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed