ぴぐノート

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

執筆者:

関連記事

C++のプリプロセッサの復習をしよう その2 【#defineの活用】

前回に引き続き、C++のプリプロセッサの復習です。 前回は#includeと#defineについて記事にしましたが、【まとめ】にも記載の通り、#defineと関連するプリプロセッサは多くあります。 今 …

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

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

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

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

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

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

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

プログレスバーをマルチスレッドを用いた実装について最後の記事です。 引き続き作成の目的は、 スレッド実行中はモーダルダイアログを表示させること。 モーダルダイアログではプログレスバーを表示し進捗が分か …