我有这个关于 boost xml 解析的问题:
这是我的一段 Xml:
<Clients>
<Client name="Alfred" />
<Client name="Thomas" />
<Client name="Mark" />
</Clients>
我用这个代码读了这个名字:
std::string name = pt.get<std::string>("Clients.Client.<xmlattr>.name, "No name");
并且工作正常,但总是检索第一个节点..
有没有办法在不循环的情况下获得第二个、第三个节点?
谢谢
最佳答案
在属性树中没有查询多值键的功能。 (部分原因是大多数受支持的后端格式不正式支持重复 key )。
但是,您可以遍历子元素,因此您可以实现自己的查询,如下所示:
for (auto& child : pt.get_child("Clients"))
if (child.first == "Client")
std::cout << child.second.get<std::string>("<xmlattr>.name", "No name") << "\n";
查看完整工作示例 Live On Coliru :
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <sstream>
#include <iostream>
using boost::property_tree::ptree;
int main()
{
std::stringstream ss("<Clients>\n"
" <Client name=\"Alfred\" />\n"
" <Client name=\"Thomas\" />\n"
" <Client name=\"Mark\" />\n"
"</Clients>");
ptree pt;
boost::property_tree::read_xml(ss, pt);
for (auto& child : pt.get_child("Clients"))
{
if (child.first == "Client")
std::cout << child.second.get<std::string>("<xmlattr>.name", "No name") << "\n";
}
};
关于带有属性树的带有boost xml的c++简单解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26362300/