3

現在、Visual Studio 2003 で C++ MFC プロジェクトに取り組んでいます。このプロジェクトの目的は、言語データを含む XML ファイルを取得し、それを単純な CSV ファイルに変換して XML に戻すことです。これを行うために、私は TinyXML ライブラリを使用しています。これはシンプルで、私のニーズには十分です。

問題は、.CSV ファイルを XML に変換しようとすると、作成された XML を TinyXML で再度開くことができないことです。今見たところ、作成したばかりのファイルを開くことができないようです。

いくつかのテストの後、TinyXML に「エラー #9: 終了タグを読み取れません」というエラーを通知させることができました。エラーを回避すると、理由もなく DOM ツリーが右にインデントするまでファイルを読み取ることができ、少し後に、ファイルに要素がないように見えます。

これは、TinyXML によって作成された後、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 のサポートとドキュメントは多少制限されており、私の問題には答えません。答えを待っています。

4

2 に答える 2

2

返信はありませんが、別のバグを解決してこのバグを解決しました。XMLに書き込んでいたデータは、何らかの理由で使用していたエンコーディングテーブルを使用していました。TinyXMLに独自のエンコーディングを管理させることで、この問題は自然に解消されました。

それは良いことです。明らかな原因はありませんでした(16進数で比較しても、2つのASCII文字は2つのエンコーディングテーブル間でまったく同じであるため、問題の原因を理解できませんでした)。

于 2010-02-23T21:27:00.523 に答える
1

同じ問題が発生しました。

XMLでそのエンコーディングを指定しながら、UTF-8エンコーディングでNotepad++でXMLファイルを編集していました。それでも動作しません。

そこで、XMLをBOMなしでUTF-8として保存しようとしましたが、正常に機能しました;)

于 2012-04-28T17:05:49.433 に答える