ぴぐノート

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

執筆者:

関連記事

Eclipse NeonとCDT/MinGWでC++開発環境を作成しよう!(2)

前回の記事でEclipseにCDTを追加インストールすることができました。 今回はMinGWとMSYSをインストールし、Eclipse上でC++プロジェクトを実行してみましょう。 この際に必要なダウン …

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

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

【Boost】オープンソースライブラリBoostをインストールしよう

普段からC++でのプログラムを作成していてBoost(ブースト)を知らないという人はあまり多くないかもしれませんが、「実はまだ使ったことない…」という人もいるのではないでしょうか? ライブ …

【MFC】マルチスレッドでプログレスバーを実装しよう その1

実は今回紹介する方法は、もしかしたら正しくないのかもしれません。 ダイアログベースのプログラムで以下の条件を満たし、プログレスバーを表示したいと考えました。 スレッド実行中はモーダルダイアログを表示さ …

【Boost】boost::property_treeの例外処理を考えよう!

ライブラリなどを使用していると、「使い方は大体分かった!使ってみよう!」とすると微妙にはまってしまうことがあります。 前回・前々回でお話しした文字コードもその一つですが今回は例外処理について考えてみま …