この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 13040|答える: 2

[C++] C++がXMLファイルデータを解析する際に派生クラスオブジェクトデータをダンプする技術...

[リンクをコピー]
掲載地 2019/01/16 9:22:59 | | | |
この投稿は2019年1月16日 09:31にSummerによって最終編集されました

1. この記事で解決すべき技術的問題とは何か?

C++言語でXML文書を解析する際、元のXML文書に現れるベースクラスタグの派生クラスデータは、従来の解析手法に基づくベースクラス型に従ってのみ基底クラスデータを解析できるが、派生クラスデータを完全に解析できないという問題を解決します。


2. 技術的背景

先行技術では、ベースクラスポインタで派生クラスを転送するためにboost::serializationを使うか、マクロBOOST_CLASS_EXPORT使ってください。

既存技術における上記のスキームはいずれも抽象クラス機構に基づいていますが、抽象クラスは具体的なオブジェクトとしてインスタンス化できないため、XMLドキュメントで基底クラスとして宣言されたオブジェクトは解析できません。 本発明は、ベースクラスオブジェクト自体とベースクラスオブジェクトによってマークされた派生クラスオブジェクトの両方のデータが正しく解析され、完全に保存されることを保証することを目的としています。


3. 本記事で示された技術的スキーム

本論文では抽象クラスのメカニズムは使用せず、ベースクラスが呼び出すクラスに基底クラスのポインタを導入し、基底クラスの解析関数を仮想関数として宣言し、解析過程で基底クラスのポインタを通じて解析関数を呼び出し、多型を適用して動的にデータを解析・保存し、最終的に基底クラスオブジェクトとベースクラスから派生した派生クラスオブジェクトの両方のデータを基底クラス定義ポインタに格納できるようにします。
具体的なステップ:
ステップ1:解析するXMLドキュメント内のデータタグに対応するすべてのクラスを設計し、トップレベルのタグからXMLデータを一つずつ解析するC++コード。
ステップ2:各解析されたタグについて、そのタグを基底クラスとして継承する他のタグが存在するかどうか、つまりタグ型が他のタグ型を導き出すかどうかを判断します。
ステップ3:現在のタグが基底クラスとして継承されていないと判明した場合、通常の解析ステップに従って現在のタグを解析します。
ステップ4:現在のタグが基底クラスとして継承されていると判断された場合、ベースクラスタグで記述される内容が基底クラスオブジェクトの従属性か派生クラスオブジェクトかをさらに判断します。
ステップ5:現在のベースクラスタグの内容がベースクラスオブジェクトを記述すると判明した場合、通常の手順に従って現在のタグを解析します。
ステップ6:現在のベースクラスタグの内容が派生クラスオブジェクトを記述している場合、新しい解析手法に従って解析するようコードを修正します。基底クラスオブジェクトを定義した前の型のデータ構造を修正し、代わりに基底クラスポインタを定義します。 基底クラスのパース関数を修正し、仮想関数として宣言します。
ステップ7:ベースクラスオブジェクトが元々解析用に定義されていた場合、代わりにベースクラスポインタが定義され、ラベル内容で記述された型に従って特定のメモリタイプが割り当てられ、ベースクラスポインタを使って現在のラベルを解析するためにパーシング関数を呼び出します。
ステップ8:現在のタグを解析して再生し、まだ解析すべきタグがあるかどうかを判断します。
ステップ9:解析すべきタグがなければ、解析完了であり、C++クラスで対応するXML文書の最も高いラベルを持つクラスにデータが保存されたことを意味します。
ステップ10:まだ解決されていないタグが判明した場合は、ステップ2に従って次のタグを解析します。

フローチャート添付

4. 概要

C++は、対応するタイプのオブジェクトをXMLタグ内容にベースクラスか派生クラスかに応じて割り当てるベースクラスポインタを導入し、定義されたベースクラスポインタを使って仮想関数として宣言された解析関数を呼び出し、XMLベースクラスタグの内容を解析します。 このようにして、XMLベースクラスタグがベースクラスオブジェクトデータを記述すると、C++の多型性に従ってベースクラス解析関数が動的に呼び出され、ベースクラスタグで記述されたベースクラスデータは正しく解析され保持されます。 XMLベースクラスタグが派生クラスオブジェクトデータを記述すると、派生クラス解析関数はC++の多型に従って動的に呼び出され、ベースクラスタグで記述される派生クラスデータも正しく解析・保存されます。





先の:Android/PC向けQQプロトコル解析チュートリアル
次に:デーモンスピリット召喚 V4.1.8は控えめに使われています
掲載地 2019/01/16 9:26:40 |
フローチャートは消えました
 地主| 掲載地 2019/01/16 9:31:49 |
2019年1月16日 09:26公開
フローチャートは消えました

フローチャートは「知っている」と付け加えています
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com