![]() |
赤紫蘇2.リファレンス |
||||||||||
|
シリアライズ |
|||||||||||
| akaxiso2.0-beta2 | |||||||||||
|
|
|||||||||||
赤紫蘇2は、シリアライザをaka::xml_serializerクラスとして実装しています。 正確には、aka::xml_serializerは、いくつかのクラスのtypedef名であり、実体となるクラスは、それぞれ、異なる文字コード変換エンジンを持っています。それぞれの文字コード変換エンジンに対応して、シリアライザクラスが定義されています。
上記のクラスのうちのひとつが、以下のルールに従い、aka::xml_serializerクラスへとtypedefされます。 1.Xerces-C++を使用する場合。(AKAXISO2_USE_XERCESCが#defineされている場合) 2.babelを使用するが、Xerces-C++は使用されない場合。(AKAXISO2_USE_XERCESCは#defineされていず、AKAXISO2_USE_BABELが#defineされている場合) 3.babelもXerces-C++も使用しない場合。(AKAXISO2_USE_XERCESCもAKAXISO2_USE_BABELも#defineされていない場合。) また、上記ルールにかかわらず、対応する文字コード変換エンジンが使用可能な場合、それぞれのシリアライザクラスを、直接使用することも可能です。(たとえば、Xerces-C++を使用する場合でも、バベルが使用可能であれば、aka::babel_serizlierは使用可能。) シリアライザの使い方 aka::xml_serializerクラスを作成し、serialize()メソッドを呼び出すことでシリアライズが可能です。 aka::xml_serializer serializer; /* ドキュメントのルートインスタンス ドキュメント名はaka::doctype()を用いて"root"と定義されているものとする。*/ root r; /* 適当にrを設定 */ r ..... /* std::coutにシリアライズしたドキュメントを出力 */ serializer.serialize(r, "root", std::cout); シリアライズ時の名前空間指定 aka::xml_serializerは、それぞれのインスタンスごとに、名前空間出力時の設定を個別に保持することができます。 また、シリアライズ時の名前空間の扱いは、Namespaces in XMLの仕様に基づいています。バージョン1.0と1.1の二つが規定されています。(以降、NS1.0、NS1.1と呼びます。) NS1.0では、ルート要素で名前空間プレフィクスの宣言を行い、それ以外の場所で名前空間の宣言を行うことができません。 赤紫蘇2は、NS1.0、NS1.1の両者の方法で、シリアライズを行うことができます。それぞれの方法について説明します。 NS1.0スタイルのシリアライズ 以下の指定を、シリアライズ前に行う必要があります。
aka::xmlns("aka", "http://akaxiso.sourceforge.jp");
/* シリアライザの作成 */
aka::xml_serializer serializer;
/* NS1.1スタイルを無効にする。*/
serializer.enable_ns11(false);
/* 名前空間プレフィクス"aka"と対応する名前空間URI("http://akaxiso.sourceforge.jp")を */
/* ルート要素で宣言するための指定。 */
serializer.using_prefix("aka");
/* もしくは、URI(http://akaxiso.sourceforge.jp")に対応する名前空間プレフィクス'aka'を */
/*指定することもできる。*/
/* serializer.usin_uri("http://akaxiso.sourceforge.jp"); */
/* シリアライズ */
serializer.serialize(root, "タグ名", std::cout);
NS1.1スタイルのシリアライズ NS1.1スタイルでは、子要素の名前を調べ、必要な名前空間の宣言を自動的に生成します。また、NS1.1スタイルは、デフォルトで有効です。このため、特別な操作は必要ありません。 /* シリアライザの作成 */ aka::xml_serializer serializer; /* シリアライズ */ serializer.serialize(root, "タグ名", std::cout); 注) 子要素の名前を調べて、名前空間の宣言を行います。しかし、要素値については、チェックを行いません。xml_serializer::using_prefix()、xml_serializer::using_uri()を用いて、明示的に、名前空間の宣言を生成してください。 |
|||||||||||
