【发布时间】:2017-11-30 08:20:18
【问题描述】:
我有以下 xml 数据,我想通过 boost 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>
我在下面编写了 boost 代码,但我只读取了“应用程序”的第一个孩子,而无法阅读其他两个孩子。每次内循环获取第一个孩子的数据。
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 阅读所有孩子吗?
提前致谢。
【问题讨论】:
-
没有真正的 Boost XML 解析器。 PropertyTree 对通过修改后的 RapidXML 解析器从 XML 加载提供了一些基本支持,但它不支持大部分 XML,而且正如您所见,在访问数据时有点不确定。
-
@SebastianRedl 感谢您传播福音。我很高兴它已成为常识。我不会说数据访问是不确定的。事实上,它非常适合访问属性。 (参见例如avoiding loop frenzy 和translators)。