使用 Boost c++ 解析嵌套标记的 xml
Parsing xml using Boost c++ for nested tags
我正在尝试使用具有以下结构的boost解析xml文件:
<root>
<chocos>
<choco>
<color>1</color>
<companies>
<comapany>10</company>
<comapany>11</company>
</companies>
</choco>
<choco>
<color>2</color>
<companies>
<comapany>12</company>
<comapany>13</company>
</companies>
</choco>
</chocos>
</root>
我需要将其存储在以下类中:
class root_info
{
public:
//some members
std::vector<choco_info> chocos;
}
class choco_info
{
int color;
int companies[100];
}
我编写了以下代码,但它显示错误:
没有这样的节点(公司(无法读取 xml 文件>
法典:
for(const auto& v : pt.get_child("root.chocos"))
{
choco_info choco;
if(v.first == "choco")
{
choco.color = v.second.get<unsigned>("color");
int i = 0;
for(const auto& v2 : pt.get_child("companies"))
{
if( v2.first == "company")
{
choco.company[i] = v2.second.get<unsigned>("company");
i++;
}
}
}
root.chocos.push_back(choco);
}
xml无法更改,因为它已提供给我。主要问题在于如何迭代"巧克力"和"公司">
构建代码有助于降低复杂性:
住在科里鲁
#include <boost/property_tree/xml_parser.hpp>
std::string const sample = R"(<root>
<chocos>
<choco>
<color>1</color>
<companies>
<comapany>10</company>
<comapany>11</company>
</companies>
</choco>
<choco>
<color>2</color>
<companies>
<comapany>12</company>
<comapany>13</company>
</companies>
</choco>
</chocos>
</root>)";
using boost::property_tree::ptree;
using companies_t = std::vector<int>;
struct choco_info {
int color;
companies_t companies;
};
using chocos_t = std::vector<choco_info>;
struct root_info {
//some members
chocos_t chocos;
};
bool read_companies(ptree const& pt, companies_t& into) {
for (auto& [name,child] : pt)
if (name == "comapany") // FIXME
into.push_back(child.get_value<int>());
else
return false;
return true;
}
bool read_chocos(ptree const& pt, chocos_t& into) {
for (auto& [name,child] : pt) {
if (name == "choco") {
choco_info ci;
ci.color = child.get("color", -1);
if (!read_companies(child.get_child("companies"), ci.companies))
return false;
into.push_back(std::move(ci));
} else {
return false;
}
}
return true;
}
#include <iostream>
int main() {
ptree pt;
{
std::istringstream iss(sample);
read_xml(iss, pt);
}
root_info result;
bool ok = true;
try {
ok = read_chocos(pt.get_child("root.chocos"), result.chocos);
} catch(std::exception const& e) {
std::cout << "Exception: " << e.what() << "n";
ok = false;
}
if (ok) {
std::cout << "Parsed:n";
for (auto& choco : result.chocos) {
std::cout << " - color " << choco.color << "n";
for (int company : choco.companies)
std::cout << " * company " << company << "n";
}
} else {
std::cout << "Error in inputn";
}
}
指纹
Parsed:
- color 1
* company 10
* company 11
- color 2
* company 12
* company 13
相关文章:
- 嵌套在类中时无法设置成员数据
- 无法访问嵌套类.类的使用无效
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在C++中搜索嵌套多映射值
- 在C++中将矢量转换为嵌套地图
- C++嵌套if语句,基本货币交换
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 嵌套的匿名命名空间
- 使用 Boost c++ 解析嵌套标记的 xml
- 使用提升解析嵌套的 xml
- 如何使用RapidXML读取嵌套的XML
- 将xml字符串嵌套到xml元素中的语法
- 通过反射在XML中的C/C++头文件中定义的可视化嵌套结构/联合
- 正在分析XML中C/C++头文件中定义的嵌套结构/联合
- 如何使用 QDomDocument 从 XML 文档中删除嵌套标记
- 如何使用 qt 删除嵌套的 xml 元素
- 无法读取嵌套 xml 标记的属性 (QXmlStreamReader)
- 在OpenCV中读取嵌套XML