ぴぐノート

Good code is its own best documentation.

Boost C/C++

【Boost】boost::property_treeでXMLファイルを書き込もう!

投稿日:

前回の記事でXMLファイルの書き込みは難しくなくできそうでしたネ。
今回はXMLファイルの書き込みを行い、出力してみましょう。

読み込みと同じくライブラリファイルは不要で、ヘッダーファイルのみで利用できます!

何が必要なのか確認しよう!

冒頭でも述べましたがライブラリファイル不要で、ヘッダーファイルのみが必要です。
ヘッダーファイルの準備などはこちらの記事も参照してください!

ヘッダーファイル boost/property_tree/xml_parser.hpp

サンプルプログラムを作ってみよう!

とりあえずサンプルプログラムを作って動作を確認してみましょう。
以下のようなXMLファイルを作成できれば完成とします。

では、プログラムを作ります!

実行してみると、正しくXMLファイルが作成できていそうですネ。

やっぱり文字コードが気になる!

前回の読み込みについても文字コードを意識していないと日本語の文字化けが発生していました。
今回も同様に変換を行わずに、std::stringに文字列を入れて出力するとしっかり文字化けします。

また、std::wstringに文字列を入力してUTF-8への変換を行わずに出力しようとするとテンプレートライブラリ特有の難しいエラーコードが量産されます…;;

何か方法はないのか…

こういった動作を回避するためには、std::string に文字列リテラルを入力するときに u8″栢木先生の…” と代入する方法もあります。

この場合は変換は不要ですが、デバッガーで変数の値をウォッチしたいといった場合にはうまく取得できませんでした。
(きっと何か一手間を加えたら確認できるのでしょう…。)

また、前回の記事のように読み取ったデータを保持して、アプリケーションの終了時に出力する。といった動作を考えるとやっぱり変換を行うのが手間がかからなそうです。

まとめ

まだ課題はありますが、XMLファイルの書き込み自体には大きく困る部分はありませんでしたネ。

XMLファイルの構成が複雑になってくると、今回使用した boost::property_tree::ptree::add() ではなく、boost::property_tree::ptree::put() を使用する場面なども出てきます。

get_optional/get, add/put, 引数の指定など混乱してしまうこともありますが、できる限りシンプルに考えてスマートに実装していきたいです!

スポンサーリンク

スポンサーリンク

-Boost, C/C++

執筆者:

関連記事

【OpenCV】MFCのピクチャーコントロールに描画しよう!

前回、OpenCVを使って画像の回転や二値化などを行って動作確認をしました。 今回はMFCでダイアログベースのアプリケーションを作成し、ピクチャーコントロールにOpenCVで読み込んだ画像を表示させて …

【Boost】boost::property_treeでXMLファイルを読み込もう!

以前はアプリケーションの設定ファイルに単純なテキストである、INIファイルを用いていたアプリケーションも多かったですが、最近はXML(Extensible Markup Language:拡張可能なマ …

C++のプリプロセッサの復習をしよう その1

C++を勉強していた時期から苦手だったのがプリプロセッサでした。 インクルートガードに#ifndefやら#defineやら#pragma onceやら…。 C++に限った話ではありませんが …

【MFC】フォルダー選択ダイアログの表示【Visual C++】

出力先の指定などフォルダー選択のダイアログを表示させたいことがあります。 フォルダー選択ダイアログを表示させるためには、SHBrowseForFolder関数を使います。 SHBrowseForFol …

【MFC入門】メッセージボックスにエラーコードを表示させよう

ライブラリなどを使用していると、戻り値にエラーコードを返す関数は比較的多いです。 GetLastError関数(最新のエラーコードを取得する関数)がライブラリに含まれていることもありますが、そうでない …