IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TXMLDocument et EDomParseError


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut TXMLDocument et EDomParseError
    Bonjour � tous

    Je suis actuellement en train de rendre mon programme multilangue.

    j'ai donc diff�rent fichier XML contenant les captions des boutons et autres affichages de mon application (un par langue).

    Au d�marrage de mon application, je charge le document XML correspondant a la langue stock� dans un fichier ini et je renseigne tous les captions. L� pas de probl�me.

    Je veux donn� la possibilit� a l'utilisateur de changer cette langue quand il le d�sire. J'ai donc un menu me permettant de faire cela, qui appelle les m�me fonctions que lors du premier chargement du programme et ainsi charger les captions de la langue correspondante.

    Or, lors d'un changement de langue, j'ai une erreur EDomParseError

    Est-ce que quelqu'un saurais d'o� peut venir le probl�me.

    Voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    // Méthode qui charge les Caption des composants
    bool __fastcall TMainForm::ChargerCaption(void)
    {
            // Chemin pour le fichier de langue
            AnsiString CheminFichierLang = ExtractFilePath(Application->ExeName) + "\Lang\\";
     
            // On fini de construire le chemin pour le fichier de langue
            CheminFichierLang += Langue;
            CheminFichierLang += ".lang";
     
            // On récupère le contenu du fichier XML
            DocumentXML->LoadFromFile(CheminFichierLang);
     
            // On active le document
            DocumentXML->Active = true;
     
            // On récupère la racine du document
            _di_IXMLNode Racine = DocumentXML->DocumentElement;
     
            ....
    }
    L'erreur se produit lorsque je veux r�cup�rer la racine.

    Voici l'appel dans le constructeur de l'application pour le premier chargement

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
            // On charge la langue
            Language();   // Méthode qui récupère la langue dans le fichier ini
     
            // On charge les captions
            if(!ChargerCaption())
            {
                    ShowMessage("Erreur dans le fichier de langue !");
     
                    // On vide le document XML
                    DocumentXML->XML->Clear();
     
                    // On désactive le document
                    DocumentXML->Active = false;
     
                    Application->Terminate();
            }
     
            // On vide le document XML
            DocumentXML->XML->Clear();
     
            // On désactive le document
            DocumentXML->Active = false;
    Merci d'avance pour votre aide.

  2. #2
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Salut,
    Je ne connait pas du tout les documents XML. Par contre j'ai aussi mon application multilingue avec possibilit� de mise � jour par l'utilisateur.
    Si ca t'int�resse, voil� mon principe:
    J'ai un fichier texte contenant en ligne 1 toutes les langues s�par�es par des ';'
    Les lignes suivantes sont sous le m�me principe:
    1;Fran�ais;English;Italiano
    2;Bonjour;Hello;Buongiorno

    Au chargement du fichier, je teste cette premi�re ligne et charge les langues �num�r�es (avec un num�ro associ� expl:Fran�ais = 0). Il me suffit ensuite de r�cup�rer le texte � la ligne d�sir�e de la langue voulue.
    Ensuite ce fichier est charg� en ressource du programme, donc interne � l'ex�cutable. L'utilisateur peut le sortir et le modifier. Pour �tre s�r du r�sultat la sauvegarde de cette modification n'�crase pas ce fichier, mais est enregistr� comme ressource utilisateur.
    L'avantage est que si tu ouvres ce fichier sous Excel (comme un csv) tu as une bonne pr�sentation pour le voir.

    Il existe bien d'autres m�thodes, comme l'utilisation de DLL ou l'utilisation de gnutext ...

  3. #3
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Ta solution est forte int�ressante mais malheureusement ne peux pas convenir a ce que je veux faire. Je veux avoir la possibilit� par la suite d'ajouter des pack de langue pour �viter a la personne de r�installer compl�tement l'application.

    En tout cas, merci de l'avoir propos�.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    74
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 74
    Par d�faut
    M�me probl�me en ce moment mais en cr�ant le TXMLDocument dynamiquement
    J'ai une exception en essayant de lire la racine du documentElement

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    TXMLDocument *xmlDoc = new TXMLDocument("");
    xmlDoc->DOMVendor = GetDOMVendor("MSXML");
    xmlDoc->LoadFromFile( "parametring.xml" );
    xmlDoc->Active = true;
     
    _di_IXMLNode xmlDocElementNode = xmlDoc->DocumentElement;
    Apparemment le TXMLDocument doit �tre enregistrer dans un TDataModule mais je n'y arrive pas (FAQ borland delphi...).
    Bien sur il n'y a pas de contructeur de TXMLDocument avec un TControl.

    Help

  5. #5
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Citation Envoy� par kurul1
    Ta solution est forte int�ressante mais malheureusement ne peux pas convenir a ce que je veux faire. Je veux avoir la possibilit� par la suite d'ajouter des pack de langue pour �viter a la personne de r�installer compl�tement l'application.

    En tout cas, merci de l'avoir propos�.

    Ma solution modifie la ressource de l'exe sans le recompiler ni le r�installer. J'utilise la m�thode UpdateResource pour mettre � jour le fichier de l'exe. J'ai aussi, utilisant le m�me principe, une variable sauvegard� pour remettre la langue, pr�c�demment utilis� par l'utilisateur, au lancement de l'application.

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    74
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 74
    Par d�faut
    Probl�me resolu pour ma part.

    tu ne peux utiliser un TXMLDocument que si il est impl�ment� et enregistr� dans l'environnement VCL de ton application, ce qui n'est possible apparemment qu'en Delphi.

    Donc en partant de ce principe, j'ai utilis� directement un _di_IXMLDocument et cela fonctionne correctement.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
     _di_IXMLDocument xmldoc = LoadXMLDocument("parametring.xml");
    ou
     _di_IXMLDocument xmldoc = LoadFormXML("<ROOT></ROOT>");
     
    _di_IXMLNode docElement = xmldoc->DocumentElement;

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Par d�faut
    Bonjour

    Le composant TXMLDoc fonctionne aussi avec BCB 6.0.
    J'ai le code suivant qui charge un fichier XML et l'affiche dans un TMemo, il tourne sans probl�me
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    	XMLDoc->LoadFromFile("exxai.xml");
    	Memo1->Clear();
    	Memo1->Lines->Assign(XMLDoc->XML);

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me avec le composant TXMLDocument
    Par kurul1 dans le forum C++Builder
    R�ponses: 9
    Dernier message: 14/04/2005, 15h36
  2. TXMLDocument
    Par Mammuth dans le forum C++Builder
    R�ponses: 7
    Dernier message: 25/03/2005, 17h02
  3. Violation d'acc�s sur un TXMLDocument
    Par WebPac dans le forum Composants VCL
    R�ponses: 14
    Dernier message: 15/03/2005, 15h10
  4. Probl�me avec XML.Clear dans un TXMLDocument
    Par Tardiff Jean-Fran�ois dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 04/01/2005, 11h45
  5. TXMLDocument
    Par fplanglois dans le forum Composants VCL
    R�ponses: 5
    Dernier message: 15/09/2004, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo