2010-02-19 22 views
3

我目前工作的一個C++ MFC項目上的Visual Studio 2003年該項目的目標是能夠採取一個XML文件,其中包含語言的數據,將其轉換爲一個簡單的CSV文件並返回到XML。爲此,我使用TinyXML庫,它非常簡單,足夠滿足我的需求。TinyXML的無法讀取自己的文件

的問題是,一旦我嘗試我的.CSV文件轉換爲XML,創建的XML不能再次打開的TinyXML。從我現在看到的看來,它似乎無法打開它剛剛創建的文件。

一些測試後,我已經能夠讓TinyXML的告訴我它的錯誤:「錯誤#9:無法讀取結束標記」。如果繞過錯誤,那麼文件可以讀取到DOM樹沒有任何理由向右縮進的位置,稍後,文件似乎是空的任何元素。

這是一個錯誤的文件通過TinyXML的作爲讀,已經由它創建之後。

<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> 

如果我得到的第一個元素的指針和瀏覽,而調試,這正是TinyXML的用「的LoadFile()」命令讀什麼。

還要注意的是,如果我做的打開文件(源上面的錯誤之一)與Firefox,或寫字板,或其他任何東西,語法是正確的,沒有錯誤可言。一切都在這裏,沒有失蹤。

我不懷疑我的讀/寫代碼是錯誤的,因爲當我打開/讀/寫一個未觸及的XML文件時,一切似乎按計劃進行。

現在如果有人有任何想法了,爲什麼我得到這個錯誤,我將非常感激。 TinyXML支持和文檔有所限制,並不能解決我的問題。 我一直在尋找答案。

回答

2

嗯,我沒有答覆,但我解決了另一個解決這個錯誤。我正在寫入我用於任何原因的XML使用的編碼表中的數據。通過讓TinyXML管理自己的編碼,這個問題就消失了。

這是一件好事,沒有明顯的原因(即使通過十六進制比較,兩個ASCII編碼字符在兩個編碼表之間完全相同,所以我不知道是什麼導致了這個問題)。

1

我遇到了同樣的問題。

我以UTF-8編碼在Notepad ++中編輯我的XML文件,同時也在XML中指定了編碼。仍然無法工作。

所以我試圖保存我的XML爲沒有BOM的UTF-8,它工作正常;)