ぴぐノート

Good code is its own best documentation.

Boost C/C++

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

投稿日:2017年7月10日 更新日:

以前はアプリケーションの設定ファイルに単純なテキストである、INIファイルを用いていたアプリケーションも多かったですが、最近はXML(Extensible Markup Language:拡張可能なマーク付け言語)で記述された設定ファイルを用いたアプリケーションもよく見かけますネ。

先日インストールしたBoostにもXMLファイルの読み込みライブラリがあります。
今回はこのXMLファイルの読み込みについて遊んでみます!

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

XMLファイルの読み込みは静的ライブラリ不要、ヘッダーファイルのみで利用することができます。

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

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

早速、サンプルプログラムで動かし方を見てみましょう。
今回は以下のXMLファイルを読み込んで内容を表示させてみましょう。

最初のポイントはすべて英語で記述しており、日本語がない点です。

きちんと表示されていますネ!
属性の取得を行う場合、<xmlattr>と指定する必要があるところは少し気を付けないといけないです。

日本語にしてみる!

XMLファイルの中身が日本語だとどうなるでしょうか。


文字化けしました…;;
うーん、std::stringにUTF-8の文字を入力するとダメっぽいでしょうか…?
取得したstd::stringをstd::wstringに変換してみましょう。

出力は問題なさそうですが、文字コード関連はもう少し勉強しないといけません…;;

要素を増やしてみる!

今までは1つの<book>タグしかありませんでしたが、これを複数増やしてループ処理を加えてみます。

今のところは問題なさそうですネ。
<book>タグが非常に多くなった場合の処理時間が少し気になるところでしょうか。

まとめ

そんなに難しいところではなかったのですが、文字コード関連や get_child() がどこを指しているのか(サンプルだと for 文で使用する it )、シンプルに考えて整理していかないといけない感じがしました。
XMLを設定ファイルとして利用したい場合は設定値を保持するクラス設計の方が頭を抱えそうですネ。

 

スポンサーリンク

スポンサーリンク

-Boost, C/C++

執筆者:

関連記事

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

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

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

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

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

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

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

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

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

前回の記事でXMLファイルの書き込みは難しくなくできそうでしたネ。 今回はXMLファイルの書き込みを行い、出力してみましょう。 読み込みと同じくライブラリファイルは不要で、ヘッダーファイルのみで利用で …