ぴぐノート

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

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

【OpenCV】OpenCVを使ってみよう!表示・回転・拡縮・二値化

前回インストールを行ったOpenCVライブラリを使ってサンプルプログラムをいくつか作成してみましょう。 OpenCVはすごく有名な画像処理ライブラリなのでインターネットで探せばサンプルプログラムはたく …

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

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

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

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

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

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