Boost Property Tree LibraryでXMLをいじってみた

今作っているRPGのアイテムのデータをXMLで表現しているのですが、それを読み込む部分で何にしようかなと思いBoostを使ってみました。ということでメモも兼ねて記事を書いておきます。

パースするXMLは以下のような形式(ある程度簡略化)です。

<?xml version="1.0" encoding="shift-jis"?>

<ItemList>
	<Item name="hoge">
		<Script>hogehoge.lua</Script>
	</Item>

	<Item name="bar">
		<Script>foobar.lua</Script>
	</Item>
</ItemList>

そして読み込み部分は以下のような感じです。

boost::property_tree::ptree ReadData;
boost::property_tree::read_xml("ItemDataBase.xml" , ReadData );

BOOST_FOREACH(const auto& child, ReadData.get_child("ItemList")) {
	if (const auto& value = child.second.get_optional<std::string>("Script")){
		std::cout << value.get() << std::endl;
	}
}

まず

BOOST_FOREACH(const auto& child, ReadData.get_child("ItemList"))

の部分ではItemListのひとつ下の階層のItemを取得してforeachでまわしています。たとえば最初のループでは

	<Item="hoge">
		<Script>hogehoge.lua</Script>
	</Item>

という部分的なXMLを取得しています(たぶん。適当にいじっていたらうまくいったというのが本当のところですw)
そして次のif文でそれのなかのScript(hogehoge.luaなど)を取得して表示しています。

参考記事:https://sites.google.com/site/boostjp/tips/xml