ぴぐノート

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

執筆者:

関連記事

【Boost】Boostライブラリの日付を使ってみよう!

先日の記事でBoostをインストールできたのでBoostのライブラリを使って遊んでみましょう。 今回は日付に関する情報をBoostから取得・表示したり、〇月〇日~□月□日が何日間あるか(期間)取得して …

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

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

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

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

【C++11】後処理が必要なリソースはスマートポインタを使おう

オープンソースのライブラリのソースコードを呼んでいるとC++11で追加されたunique_ptrを使用しているところもちらほらと見られるようになってきています。 MFCなどを利用していれば動的確保した …

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

MFCなどを利用する場合にはほぼVisualStudio一択ですが、簡単なコンソールアプリケーションを作る場合にはEclipseのほうが便利な場合も多いです。 特に「普段はJavaで開発を行っているけ …