私は以下のxmlデータを持っています。私はboost xml parserを解析したいと思います。ブーストとxmlの解析
<?xml version="1.0" encoding="UTF-8"?>
<applications>
<application>
<id>1</id>
<platform>linux-x64</platform>
<version>2.4</version>
</application>
<application>
<id>2</id>
<platform>windows</platform>
<version>2.5</version>
</application>
<application>
<id>3</id>
<platform>linux</platform>
<version>2.6</version>
</application>
</applications>
私は以下のブーストコードを書いていますが、「アプリケーション」の最初の子のみを読み込み、他の2人の子を読み取ることはできません。毎回内部ループが最初の子のデータを取得します。
boost::property_tree::ptree pt;
boost::property_tree::read_xml(sModel, pt); // sModel is filename which contains above xml data
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("applications"))
{
std::string key = v.first.data();
std::string Id, platform, version;
if (key == std::string("application"))
{
BOOST_FOREACH(boost::property_tree::ptree::value_type &v_, pt.get_child("applications.application"))
{
std::string app_key = v_.first.data();
std::string app_value = v_.second.data();
if (app_key == std::string("id"))
pkgId = app_value;
else if (app_key == std::string("platform"))
platform = app_value;
else if (app_key == std::string("version"))
version = app_value;
}
}
}
ここで、私はプラットフォームを "linux-x64"としています。 誰かがこのboost xmlを通してすべての子供を読む方法を指導できますか?
ありがとうございました。
ブーストXMLパーサが本当にありません。 PropertyTreeには、変更されたRapidXMLパーサーを介してXMLから読み込むための基本的なサポートがいくつかありますが、ほとんどのXMLはサポートされていません。また、データにアクセスする際にはわかります。 –
@SebastianRedl福音を伝えてくれてありがとう。私はそれが常識になってうれしいです。私はデータアクセスがiffyであるとは言いません。実際、プロパティへのアクセスにはかなりいいですね。 (例:[回避ループフレージー](https://stackoverflow.com/questions/47013164/boostproperty-tree-parsing-of-complex-xml-strucure/47019176#47019176)と[translators](https:// stackoverflow。 com/a/43769414/85371))。 – sehe