0

因此,让我们看一下修改后的示例代码:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <boost/foreach.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

void load(const std::string &file_path)
{
    using boost::property_tree::ptree;
    ptree pt;
    std::ifstream script;
    script.open(file_path.c_str());
    read_xml(script, pt);
    BOOST_FOREACH(boost::property_tree::ptree::value_type &v,
                  config.get_child("config.servecies"))
    {
        std::cout
            << "First data: " << v.first.data() << std::endl
            << "Second data: " << v.second.data() << std::endl;
    }

}

我用这样的xml试了一下:

<config>
    <servecies>
        <module>file</module>
        <module>Admin</module>
        <module>HR</module>
        <notModule>MyNotModule</notModule>
    </servecies>
</config>

它打印:

第一个数据:模块
第二个数据:文件
第一个数据:模块
第二个数据:Admin
第一个数据:模块
第二个数据:HR
第一个数据:notModule
第二个数据:MyNotModule

但是当我尝试这样的 json 文件(通过这个 web 工具从这个 xml 创建)时:

{
  "config": {
    "name": "myconfig",
    "servecies": {
      "module": [
        "file",
        "Admin",
        "HR"
      ],
      "notModule": "MyNotModule"
    }
  }
}

它打印:

第一个数据:模块
第二个数据:
第一个数据:notModule
第二个数据:MyNotModule

如何使 boost property_tree 在解析 XML 时在 JSON 上产生相同的结果?如何找出 value_type 是否是某种一维数组并遍历它?

4

1 回答 1

4

如何使 boost property_tree 在解析 XML 时在 JSON 上产生相同的结果?

让 Boost.PropertyTree 输出 JSON。然后它将能够输入该 JSON 文件。

Boost.PropertyTree 用于存储属性。这是一种以人类可读格式保存属性并在以后恢复这些属性的方法。

不是一种制作又快又脏的 JSON/XML 阅读器的方法。它以特定格式写入数据,当给它读取数据时,它期望给它的数据就是它写入的数据。如果您尝试将任何旧的 JSON 向下推,它不一定会返回合理的信息。它写入有效的 JSON,但该 JSON 的结构特定于 PropertyTree,读取代码将期望该结构存在。

旁注:我认为 Web 工具不是很好,因为它向 JSON 文件添加了原始 XML 中不存在的信息。

于 2011-07-11T00:16:29.597 回答