c++简单解析带有属性树的boost xml

标签 c++ xml visual-studio-2012 boost

我有关于 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");

并且工作正常,但总是检索第一个节点..

有没有办法不用循环得到第二个、第三个节点?

谢谢

最佳答案

在属性树中没有查询多值键的工具。 (部分原因是大多数受支持的后端格式并不正式支持重复键)。

但是,您可以遍历子元素,这样您就可以实现自己的查询,如下所示:

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";
    }
};

关于c++简单解析带有属性树的boost xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26362300/

相关文章:

c# - ASP.NET:插入后按钮不起作用 'namespace'

asp.net - 在客户端 ASP .Net C# 上运行非托管 C++ 函数

c++ - 在 C++ 中创建自定义 exe 文件

SQL Server - 在 XML 数据类型中存储换行符

java - 如何从 xml 创建对象的 arrayList?

sql - 使用 FOR XML PATH 从 XMLTYPE 列中选择时如何删除列名

c# - 调用堆栈仅包含外部代码

c++ - 处理无效操作数错误

C++:交换指向的变量

unit-testing - 使用 Chutzpah 运行 Typescript qUnit 测试