2010-02-19 7 views
3

Je travaille actuellement sur un projet C++ MFC sur Visual Studio 2003. Le but de ce projet est de pouvoir prendre un fichier XML contenant des données de langage, le convertir en un simple CSV fichier et retour au XML. Pour ce faire, j'utilise la bibliothèque TinyXML, qui est simple et assez bonne pour mes besoins. Le problème est que, une fois que j'essaie de convertir mon fichier .CSV en XML, le XML créé ne peut plus être ouvert avec TinyXML. De ce que je vois maintenant, il semble qu'il ne peut pas ouvrir le fichier qu'il vient de créer. Après quelques tests, j'ai été capable de faire dire à TinyXML son erreur: "Erreur # 9: Impossible de lire la balise de fin". Si je contourne l'erreur, le fichier est lisible jusqu'à un point où l'arbre DOM se décale vers la droite sans raison et, un peu plus tard, le fichier semble être vide de tout élément.TinyXML ne peut pas lire son propre fichier

Ceci est un fichier erroné tel que lu par TinyXML, après avoir été créé par lui.

<app> 
− 
<global> 
    <langidglobal1 lang="fr">GLOBAL1</langidglobal1> 
    <langidglobal1 lang="en">GLOBAL1</langidglobal1> 
    <langidglobal1 lang="ru"/> 
    <langidglobal1 lang="de"/> 
</global> 
− 
<mainmenu> 
    <system lang="fr">Syst�me</system> 
    <system lang="en">System</system> 
    <system lang="ru"/> 
    <system lang="de"/> 
    <motor lang="fr">Moteurs</motor> 
    <motor lang="en">Motors</motor> 
    <motor lang="ru"/> 
    <motor lang="de"/> 
    <param lang="fr">Param�tres</param> 
    <param lang="en">Parameters</param> 
    <param lang="ru"/> 
    <param lang="de"/> 
    <diag lang="fr">Diagnostique</diag> 
    <diag lang="en">Diagnostic</diag> 
    <diag lang="ru"/> 
    <diag lang="de"/> 
    <rod lang="fr">Tiges</rod> 
    <rod lang="en">Rods</rod> 
    <rod lang="ru"/> 
    <rod lang="de"/> 
    <aide lang="fr">Aide</aide> 
    <aide lang="en">Help</aide> 
    <aide lang="ru"/> 
    <aide lang="de"/> 
    <exit lang="fr">Quitter</exit> 
    <exit lang="en">Exit</exit> 
    <exit lang="ru"/> 
    <exit lang="de"/> 
    <runningtools lang="fr">Outils</runningtools> 
    <runningtools lang="en">Running Tools</runningtools> 
    <runningtools lang="ru"/> 
    <runningtools lang="de"/> 
    <manualpatterns lang="fr">Patron Manuel</manualpatterns> 
    <manualpatterns lang="en">Manual Patterns</manualpatterns> 
    <manualpatterns lang="ru"/> 
    <manualpatterns lang="de"/> 
    <alarm lang="fr">Alarmes Actives</alarm> 
    <alarm lang="en">Active Alarms</alarm> 
    <alarm lang="ru"/> 
    <alarm lang="de"/> 
    <patternno lang="fr"># Patron</patternno> 
    <patternno lang="en">Pattern #</patternno> 
    <patternno lang="ru"/> 
    <patternno lang="de"/> 
    <lastlogs lang="fr">Derni�res Billes</lastlogs> 
    <lastlogs lang="en">Last Logs</lastlogs> 
    <lastlogs lang="ru"/> 
    <lastlogs lang="de"/> 
    <maintenancemode lang="fr">Entretien</maintenancemode> 
    <maintenancemode lang="en">Maintenance</maintenancemode> 
    <maintenancemode lang="ru"/> 
    <maintenancemode lang="de"/> 
− 
    <toolcustom1 lang="fr"> <!-- Random indentation starts here --> 
    Force Entr�e 

     <toolcustom1 lang="en">Force Input</toolcustom1> 
     <toolcustom1 lang="ru"/> 
     <toolcustom1 lang="de"/> 
     <toolcustom2 lang="fr">Force Sortie</toolcustom2> 
     <toolcustom2 lang="en">Force Output</toolcustom2> 
     <toolcustom2 lang="ru"/> 
     <toolcustom2 lang="de"/> 
     <jogaxis lang="fr">Jog Axes</jogaxis> 
     <jogaxis lang="en">Jog Axis</jogaxis> 
     <jogaxis lang="ru"/> 
     <jogaxis lang="de"/> <!-- And finishes here --> 
    </toolcustom1> 
    <toolcustom1 lang="en">Force Input</toolcustom1> 
    <toolcustom1 lang="ru"/> 
    <toolcustom1 lang="de"/> 
</mainmenu> 
<menuparam/> <!-- File is empty from here. There should be elements like above. --> 
<menudiag/> 
<menurod/> 
<menuaide/> 
<button/> 
<progrid/> 
<aboutbox/> 
<dlgexit/> 
<doc/> 
<!-- ...like this until... --> 
</app> 

Si je reçois un pointeur sur le premier élément et parcourir pendant le débogage, c'est exactement ce que TinyXML lu avec la commande « LoadFile() ». Notez également que si j'ouvre le fichier (la source de l'erreur ci-dessus) avec Firefox, ou WordPad, ou n'importe quoi d'autre, la syntaxe est correcte, et il n'y a pas d'erreur du tout. Tout est là, rien ne manque. Je ne soupçonne pas que mon code en lecture/écriture soit erroné, car quand j'ouvre/lis/écris un fichier XML intact, tout semble fonctionner comme prévu.

Maintenant, si quelqu'un aurait une idée de pourquoi je reçois cette erreur, je serais très reconnaissant. Le support et la documentation de TinyXML sont quelque peu limités et ne répondent pas à mon problème. Je reste à l'écoute des réponses.

Répondre

2

Eh bien, je n'ai pas de réponse, mais j'ai résolu ce problème en en résolvant un autre. Les données que j'écrivais dans mon XML utilisaient des tables d'encodage que j'utilisais pour une raison quelconque. En laissant TinyXML gérer ses propres encodages, ce problème s'est effacé par lui-même.

C'est une bonne chose, il n'y avait pas de cause apparente (même par comparaison hexadécimale, deux caractères ascii sont exactement les mêmes entre deux tables de codage, donc je ne pouvais pas réaliser ce qui a causé le problème).

1

J'ai rencontré le même problème. Je modifiais mon fichier XML dans Notepad ++ en encodage UTF-8, tout en spécifiant ce codage dans le XML aussi. Ça ne marcherait toujours pas.

J'ai donc essayé d'enregistrer mon XML en UTF-8 sans nomenclature et cela a bien fonctionné;)

Questions connexes