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など)を取得して表示しています。