ぴぐノート

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】マルチスレッドでプログレスバーを実装しよう その2

昨日に続き、プログレスバーをマルチスレッドを用いて実装してみましょう。 作成の目的は、 スレッド実行中はモーダルダイアログを表示させること。 モーダルダイアログではプログレスバーを表示し進捗が分かるこ …

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

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

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

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

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

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

【OpenCV】OpenCVをビルドして画像処理をしてみよう!

今日はOpenCVを使って画像表示をしてみたいと思います。 ツールやアプリケーションを作る場合、多かれ少なかれ画像処理は必要になってくるのではないでしょうか。 また画像処理関係ではまると泥沼化する場合 …