begin process at 2012 05 27 17:40:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > PARSER XML

PARSER XML


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :Parser, XML, Unicode, DOM Niveau :Initié Date de création :26/02/2010 Date de mise à jour :27/02/2010 23:53:29 Vu / téléchargé :3 040 / 121

Auteur : MagnumPP

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

XtreML est un parseur XML de style DOM supportant l'Unicode,non validant,qui regroupe un ensemble d'outils pour la manipulation de document xml. il est assez léger pour être intégrer dans n'importe quel programme. vous trouverez dans le fichier zip, un fichier html d'aide.
fonctionalités:
-Chargement/Sauvegarde de fichier disque ou flux mémoire au format:UTF-8, UTF-16 big endian, UTF-16 little endian, UTF-32 big endian, UTF-32 little endian. avec ou sans BOM.
-Ajouter ou supprimer des élements xml.
-Ajouter un noeud et tout son arborescence issue d'un autre document.
-Rechercher un noeud suivant son nom et/ou un couple de "Nom/valeur".
.....

Source

  • // XtreMLParser.cpp : Defines the entry point for the console application.
  • //
  • #include "stdafx.h"
  • #include "..\\..\\XtreMLParser.h"
  • int _tmain(int argc, _TCHAR* argv[])
  • {
  • UTF16String string;
  • /*****************************************************************************
  • * Premier exemple qui consiste à créer un document XML *
  • *****************************************************************************/
  • XtreMLDocument document;
  • XtreMLNODE *node,*_tmpnode; //avec 2 noeuds temporaires on peut créer n'importe quel type de document XML
  • document.ProcessingAdd("xml version=\"1.0\" encoding=\"UTF-8\"");// on ajoute le prologue.
  • node=document.NodeAdd("racine"); //node pointe sur la balise "racine"
  • node=node->NodeAdd("Course"); //node pointe sur la balise "Course"
  • node=node->NodeAdd("prix"); //node pointe sur la balise "prix"
  • node->AttrAdd("name","DAX"); //on ajoute un attribut à "prix"
  • node=node->NodeAdd("partants"); //node pointe sur la balise "partants"
  • _tmpnode=node->NodeAdd("Cheval"); /* Comme il y a plusieurs élément à ajouter dans node, j'utilise
  • une variable temporaire "_tmpnode" afin de garder la trace
  • de la balise "partants" */
  • _tmpnode->AttrAdd("name","pure sky"); //on ajoute des attributs au noeud "Cheval"
  • _tmpnode->AttrAdd("driver","Tomasoli");
  • _tmpnode->AttrAdd("propriétaire","Roulland");
  • _tmpnode=node->NodeAdd("Cheval"); // on ajoute une nouvelle balise "Cheval"
  • _tmpnode->AttrAdd("name","Natice de Fresnay"); //on ajoute des attributs au noeud Cheval
  • _tmpnode->AttrAdd("driver","Mlle Sasso M.");
  • _tmpnode->AttrAdd("propriétaire","Pellegrino L.J");
  • _tmpnode=node->NodeAdd("Cheval"); // on ajoute une nouvelle balise "Cheval"
  • _tmpnode->AttrAdd("name","Pegalas"); //on ajoute des attributs au noeud Cheval
  • _tmpnode->AttrAdd("driver","Mlle Salque");
  • _tmpnode->AttrAdd("propriétaire","Mary");
  • node=node->GetContainer(); // on remonte d'un niveau c'est à dire sur la balise "prix"
  • _tmpnode=node->NodeAdd("terrain"); //on crée la balise "terrain"
  • _tmpnode->TextAdd("Bon"); //on ajoute du text
  • /* je désire remonter au noeud racine, et au lieu d'appeler 2 fois la fonction
  • "GetContainer", j'utilise la fonction FindNode*/
  • node=document.FindNode("racine");
  • node->NodeAdd("Parieur");
  • // sauvegarde du document;
  • char lpBuffer[256];
  • GetCurrentDirectoryA(256,lpBuffer); //on récuperer le répertoire courant
  • string=lpBuffer;
  • string+="\\";
  • string+="Exemple_creation.xml"; //construction du nom complet du fichier de sortie
  • document.SaveToFile((wchar_t*)string.w_str(),EncUTF8,true);// on enregistre le document au format UTF-8, avec le BOM
  • /*****************************************************************************
  • * Exemple 2 -chargement et recherche d'un noeud dans le fichier *
  • * précédemment créer, le modifier et l'enregistrer dans un nouveau fichier*
  • *****************************************************************************/
  • XtreMLDocument doc2;
  • if(doc2.LoadFromFile((wchar_t*)string.w_str()))
  • {
  • node=doc2.FindNode("Cheval","name","Natice de Fresnay");/* recherche de la balise
  • balise "Cheval" contenant l'attribut
  • "name" et la valeur "Natice de Fresnay" */
  • if(node)
  • {
  • XtreMLATTRIBUTE *attr=node->FindAttr("name"); // l'attribut "name"
  • if(attr)
  • {
  • attr->SetValue("Kojack"); // on modifie sa valeur
  • }
  • if((node=doc2.FindNode("Parieur"))!=NULL) // recherche de la balise "Parieur"
  • {
  • _tmpnode=node->NodeAdd("Personne");
  • _tmpnode=_tmpnode->NodeAdd("Nom");
  • _tmpnode->TextAdd("Durant");
  • _tmpnode=(_tmpnode->GetContainer())->NodeAdd("Prenom");
  • _tmpnode->TextAdd("Michaël");
  • _tmpnode=node->NodeAdd("Personne");
  • _tmpnode=_tmpnode->NodeAdd("Nom");
  • _tmpnode->TextAdd("Martin");
  • _tmpnode=(_tmpnode->GetContainer())->NodeAdd("Prenom");
  • _tmpnode->TextAdd("Pierre");
  • }
  • //sauvegarde du fichier au de "Exemple_Modif.xml"
  • string=lpBuffer;
  • string+="\\";
  • string+="Exemple_Modif.xml";
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF8,true);
  • }
  • }
  • doc2.Clear(); // effacement de tout le contenu de doc2
  • /*************************************************************************************************
  • * Exemple 3 - Gestion de l'unicode *
  • * *
  • *************************************************************************************************/
  • node=doc2.NodeAdd("Language");
  • _tmpnode=node->NodeAdd("Arménien");
  • _tmpnode->TextAdd(L"Կրնամ ապակի ուտել եւ ինծի անհանգիստ չըներ.");
  • _tmpnode=node->NodeAdd("Russe");
  • _tmpnode->TextAdd(L"Я могу есть стекло, оно мне не вредит.");
  • _tmpnode=node->NodeAdd("Ukrainien");
  • _tmpnode->TextAdd(L"Я можу їсти шкло, й воно мені не пошкодить.");
  • _tmpnode=node->NodeAdd("Géorgien");
  • _tmpnode->TextAdd(L"მინას ვჭამ და არა მტკივა.");
  • _tmpnode=node->NodeAdd("Aménien");
  • _tmpnode->TextAdd(L"Կրնամ ապակի ուտել եւ ինծի անհանգիստ չըներ.");
  • _tmpnode=node->NodeAdd("Albanais");
  • _tmpnode->TextAdd(L"Une mund të ha qelq dhe nuk më gjen GJE");
  • _tmpnode=node->NodeAdd("Turc");
  • _tmpnode->TextAdd(L"جام ييه بلورم بڭا ضررى طوقونمز");
  • _tmpnode=node->NodeAdd("Bangali");
  • _tmpnode->TextAdd(L"আমি কাঁচ খেতে পারি, তাতে আমার কোনো ক্ষতি হয় না");
  • _tmpnode=node->NodeAdd("Tamoul");
  • _tmpnode->TextAdd(L"நான் கண்ணாடி சாப்பிடுவேன், அதனால் எனக்கு ஒரு கேடும் வராது");
  • _tmpnode=node->NodeAdd("Maltais");
  • _tmpnode->TextAdd(L"il niekol Nista '-ħġieġ u ma jagħmilli xejn");
  • _tmpnode=node->NodeAdd("Chinois");
  • _tmpnode->TextAdd(L"我能吞下玻璃而不伤身体");
  • _tmpnode=node->NodeAdd("Japonais");
  • _tmpnode->TextAdd(L"私はガラスを食べられます.それは私を傷つけません");
  • _tmpnode=node->NodeAdd("Coréen");
  • _tmpnode->TextAdd(L"나는 유리 를 먹을 수 있어요. 그래도 아프지 않아요 그래도 아프지 않아요");
  • _tmpnode=node->NodeAdd("Lao");
  • _tmpnode->TextAdd(L"ຂອ້ຍກິນແກ້ວໄດ້ໂດຍທີ່ມັນບໍ່ໄດ້ເຮັດໃຫ້ຂອ້ຍເຈັບ.");
  • _tmpnode=node->NodeAdd("Slovaque");
  • _tmpnode->TextAdd(L"Я могу есть стекло, оно мне не вредит.");
  • // pour finir on va sauvegarder le fichier sous plusieurs format.
  • UTF16String directory=lpBuffer;
  • directory+=L"\\";
  • //sauvegarde au format UTF-8 avec BOM
  • string="Langage_UTF8_BOM.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF8,true);
  • //sauvegarde au format UTF-8 sans BOM
  • string="Langage_UTF8.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF8,false);
  • //sauvegarde au format UTF-16 big endian avec BOM
  • string="Langage_UTF-16BE_BOM.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16BE,true);
  • //sauvegarde au format UTF-16 big endian sans BOM
  • string="Langage_UTF-16BE.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16BE,false);
  • //sauvegarde au format UTF-16 little endian avec BOM
  • string="Langage_UTF-16LE_BOM.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16LE,true);
  • //sauvegarde au format UTF-16 little endian sans BOM
  • string="Langage_UTF-16LE.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16LE,false);
  • //sauvegarde au format UTF-32 big endian avec BOM
  • string="Langage_UTF-32BE_BOM.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF32BE,true);
  • //sauvegarde au format UTF-32 little endian avec BOM
  • string="Langage_UTF-32LE_BOM.xml";
  • string=directory+string;
  • doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF32LE,true);
  • return 0;
  • }
// XtreMLParser.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "..\\..\\XtreMLParser.h"



int _tmain(int argc, _TCHAR* argv[])
{
 UTF16String  string; 
 
 /***************************************************************************** 
  *      Premier exemple qui consiste à créer un document XML                 *
  *****************************************************************************/  
    XtreMLDocument document;
    XtreMLNODE *node,*_tmpnode;    //avec 2 noeuds temporaires on peut créer n'importe quel type de document XML
    document.ProcessingAdd("xml version=\"1.0\" encoding=\"UTF-8\"");// on ajoute le prologue.
    
    node=document.NodeAdd("racine");          //node pointe sur la balise "racine"
    node=node->NodeAdd("Course");             //node pointe sur la balise "Course"
    node=node->NodeAdd("prix");              //node pointe sur la balise "prix"
    node->AttrAdd("name","DAX");             //on ajoute un  attribut à "prix"
    node=node->NodeAdd("partants");          //node pointe sur la balise "partants"
    
    
    
    _tmpnode=node->NodeAdd("Cheval");       /* Comme il y a plusieurs élément à ajouter dans node, j'utilise
                                              une variable temporaire "_tmpnode" afin de garder la trace  
                                              de la balise "partants"  */
    _tmpnode->AttrAdd("name","pure sky");    //on ajoute des attributs au noeud "Cheval"
    _tmpnode->AttrAdd("driver","Tomasoli");
    _tmpnode->AttrAdd("propriétaire","Roulland");
    
    _tmpnode=node->NodeAdd("Cheval");      // on ajoute une nouvelle balise "Cheval"
    _tmpnode->AttrAdd("name","Natice de Fresnay");    //on ajoute des attributs au noeud Cheval
    _tmpnode->AttrAdd("driver","Mlle Sasso M.");
    _tmpnode->AttrAdd("propriétaire","Pellegrino L.J"); 


    _tmpnode=node->NodeAdd("Cheval");      // on ajoute une nouvelle balise "Cheval"
    _tmpnode->AttrAdd("name","Pegalas");    //on ajoute des attributs au noeud Cheval
    _tmpnode->AttrAdd("driver","Mlle Salque");
    _tmpnode->AttrAdd("propriétaire","Mary");
    
    node=node->GetContainer();              // on remonte d'un niveau c'est à dire sur la balise "prix"
    _tmpnode=node->NodeAdd("terrain");    //on crée la balise "terrain"
    _tmpnode->TextAdd("Bon");             //on ajoute du text
    
    /* je désire remonter au noeud racine, et au lieu d'appeler 2 fois la fonction 
       "GetContainer", j'utilise la fonction FindNode*/
    
    node=document.FindNode("racine");
    node->NodeAdd("Parieur");
     
     
    // sauvegarde du document; 
     
  char lpBuffer[256];
  GetCurrentDirectoryA(256,lpBuffer); //on récuperer le répertoire  courant
  string=lpBuffer;
  string+="\\";
  string+="Exemple_creation.xml";  //construction du nom complet du fichier de sortie
  document.SaveToFile((wchar_t*)string.w_str(),EncUTF8,true);// on enregistre le document au format UTF-8, avec le BOM 
    
    
    
 /***************************************************************************** 
  *   Exemple 2 -chargement et recherche d'un noeud dans le fichier           *
  *   précédemment créer, le modifier et l'enregistrer dans un nouveau fichier*
  *****************************************************************************/ 
  
  XtreMLDocument doc2;
  if(doc2.LoadFromFile((wchar_t*)string.w_str()))
  {
     node=doc2.FindNode("Cheval","name","Natice de Fresnay");/* recherche de la balise
                                                                balise "Cheval" contenant l'attribut
                                                                "name" et la valeur "Natice de Fresnay" */
     if(node)
     {
        XtreMLATTRIBUTE *attr=node->FindAttr("name");   // l'attribut "name"
        if(attr)
        {
          attr->SetValue("Kojack");   // on modifie sa valeur   
        }  
        
        if((node=doc2.FindNode("Parieur"))!=NULL) // recherche de la balise "Parieur"
        {
            _tmpnode=node->NodeAdd("Personne"); 
            _tmpnode=_tmpnode->NodeAdd("Nom"); 
            _tmpnode->TextAdd("Durant");
            _tmpnode=(_tmpnode->GetContainer())->NodeAdd("Prenom");
            _tmpnode->TextAdd("Michaël");                            
                                          
            _tmpnode=node->NodeAdd("Personne"); 
            _tmpnode=_tmpnode->NodeAdd("Nom"); 
            _tmpnode->TextAdd("Martin");
            _tmpnode=(_tmpnode->GetContainer())->NodeAdd("Prenom");
            _tmpnode->TextAdd("Pierre");        
        } 
        
         //sauvegarde du fichier au de "Exemple_Modif.xml"
         string=lpBuffer;
         string+="\\";
         string+="Exemple_Modif.xml";
         doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF8,true);
     }                                            
                                                 
                                                 
                                                 
  }  

  doc2.Clear();   // effacement de tout le contenu de doc2


  /*************************************************************************************************
   *        Exemple 3 - Gestion de l'unicode                                                       *
   *                                                                                               *
   *************************************************************************************************/

  node=doc2.NodeAdd("Language");

  _tmpnode=node->NodeAdd("Arménien");
  _tmpnode->TextAdd(L"Կրնամ ապակի ուտել եւ ինծի անհանգիստ չըներ.");

  _tmpnode=node->NodeAdd("Russe");
  _tmpnode->TextAdd(L"Я могу есть стекло, оно мне не вредит.");

  _tmpnode=node->NodeAdd("Ukrainien");
  _tmpnode->TextAdd(L"Я можу їсти шкло, й воно мені не пошкодить.");

  _tmpnode=node->NodeAdd("Géorgien");
  _tmpnode->TextAdd(L"მინას ვჭამ და არა მტკივა.");

  _tmpnode=node->NodeAdd("Aménien");
  _tmpnode->TextAdd(L"Կրնամ ապակի ուտել եւ ինծի անհանգիստ չըներ.");

  _tmpnode=node->NodeAdd("Albanais");
  _tmpnode->TextAdd(L"Une mund të ha qelq dhe nuk më gjen GJE");

  _tmpnode=node->NodeAdd("Turc");
  _tmpnode->TextAdd(L"جام ييه بلورم بڭا ضررى طوقونمز");

  _tmpnode=node->NodeAdd("Bangali");
  _tmpnode->TextAdd(L"আমি কাঁচ খেতে পারি, তাতে আমার কোনো ক্ষতি হয় না");

  _tmpnode=node->NodeAdd("Tamoul");
  _tmpnode->TextAdd(L"நான் கண்ணாடி சாப்பிடுவேன், அதனால் எனக்கு ஒரு கேடும் வராது");

  _tmpnode=node->NodeAdd("Maltais");
  _tmpnode->TextAdd(L"il niekol Nista '-ħġieġ u ma jagħmilli xejn");

  _tmpnode=node->NodeAdd("Chinois");
  _tmpnode->TextAdd(L"我能吞下玻璃而不伤身体");

  _tmpnode=node->NodeAdd("Japonais");
  _tmpnode->TextAdd(L"私はガラスを食べられます.それは私を傷つけません");

  _tmpnode=node->NodeAdd("Coréen");
  _tmpnode->TextAdd(L"나는 유리 를 먹을 수 있어요. 그래도 아프지 않아요 그래도 아프지 않아요");

  _tmpnode=node->NodeAdd("Lao");
  _tmpnode->TextAdd(L"ຂອ້ຍກິນແກ້ວໄດ້ໂດຍທີ່ມັນບໍ່ໄດ້ເຮັດໃຫ້ຂອ້ຍເຈັບ.");

  _tmpnode=node->NodeAdd("Slovaque");
  _tmpnode->TextAdd(L"Я могу есть стекло, оно мне не вредит.");

  // pour finir on va sauvegarder le fichier sous plusieurs format.

  UTF16String directory=lpBuffer;
  directory+=L"\\";
  
      
  //sauvegarde au format UTF-8 avec BOM
  string="Langage_UTF8_BOM.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF8,true);

  //sauvegarde au format UTF-8 sans BOM
  string="Langage_UTF8.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF8,false);

  //sauvegarde au format UTF-16 big endian avec BOM
  string="Langage_UTF-16BE_BOM.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16BE,true);

  //sauvegarde au format UTF-16 big endian sans BOM
  string="Langage_UTF-16BE.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16BE,false);

    //sauvegarde au format UTF-16 little endian avec BOM
  string="Langage_UTF-16LE_BOM.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16LE,true);

  //sauvegarde au format UTF-16 little endian sans BOM
  string="Langage_UTF-16LE.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF16LE,false);

      //sauvegarde au format UTF-32 big endian avec BOM
  string="Langage_UTF-32BE_BOM.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF32BE,true);

  //sauvegarde au format UTF-32 little endian avec BOM
  string="Langage_UTF-32LE_BOM.xml";
  string=directory+string;
  doc2.SaveToFile((wchar_t*)string.w_str(),EncUTF32LE,true);





	return 0;
}

 Conclusion

j'attends vos remarques pour m'aider à améliorer XtreML, dans un premier temps mon souci est qu'il soit fonctionnel et par la suite je verrai  pour l'optimisation.
n'hésitez pas à le tester afin de me donner votre avis.
je veillerais à ajouter des commentaires au code lors de la prochaine mise à jour.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

27 février 2010 23:53:30 :
apport de modification mineur

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab
Source avec Zip INI PARSER FLEX++ / BISON++ par neria
Source avec Zip ENCORE UN PARSER XML par darkpoulpo
Source avec Zip MINXL (MINIMALIST XML LIBRARY) : GÉNÉRATEUR/ANALYSEUR/TRAITE... par xterminhate

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

XML DOM xerces parser une chaine de caractères avec Wrapper4InputSource [ par pbouchard ] Bonjour, Je voudrai parser une string avec l'api dom de xerces. J'arrive bien à parser du xml quand je donne un nom de fichier (dans la fonction parser un document XML avec C++ [ par assiatoune ] bonjour tout le monde!ma question est la suivante: j'ai un document XML (un schéma XML) et je veux extraire (avec C++) dante une structure d parser un schéma XML avec C++ [ par assiatoune ] Bonjour tout le monde,  je vous remercie de m'avoir répondu.  mais mon probleme est que je suis débtante en visuel C++, Besoin d'aide pour la réalisation d'un parser xml avec VC++6 [ par petiot_cedric2 ] Mon but est de créer une application avec VC++6 avec une interface graphique en C++ pour ouvrir un fichier XML, le parser et le réécrir parser xml en C [ par jbt36 ] bonjour à tous,j'ai besoin de realiser un editeur xml en Cpour cela je dois notamment parser le fichier xml pour pouvoir le manipuler,l'affichersous f XML Parser [ par tylenchuz ] Bonjour,j'ai un document xml, (voir en dessous) et je voudrai juste lire les variables coloré en rose.le but de mon appli, c'est de remplacer mes fich parser xml [ par khalil1982 ] Salut tlm,J'avais besoin d'un parseur Xml dans mon projet, qui est en C sous Unix mais de petite tailleet si c possible avec les deux approche SAX et parser XML [ par khalil1982 ] salut tlm,je veux parser un fichier XML en C sous Linux mais de petite taille( < à 80k ), et est ce que c possible de trouver les deux approche DOM Xerces-C++ -- Validation XML par DTD [ par buno ] Hello les gens!Comment allez-vous? Les vacances d'hiver se sont bien passées?Si vous avez l'habitude d'utiliser Xerces comme parser XML, j'aurais beso Parser avec description de format (xml) ? [ par RV2931 ] Bonjour,Je dois réaliser quelques parsers de fichiers, notament un parser de fichiers DXF, et d'autres formats propriétaires...J'ai entendu parler que


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales