相关疑难解决方法(0)

boost属性树xml writer输出中没有行尾

使用boost :: property_tree考虑以下代码:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using namespace boost::property_tree;

int main() {
    ptree model_tree;
    model_tree.add("calibrated", "true");
    model_tree.add("model.<xmlattr>.label", "label");
    model_tree.add("model.activity.<xmlattr>.type", "fixed");
    write_xml("test.xml", model_tree);
}
Run Code Online (Sandbox Code Playgroud)

通过编译和执行程序,我得到以下输出:

<?xml version="1.0" encoding="utf-8"?>
<calibrated>true</calibrated><model label="label"><activity type="fixed"/></model>
Run Code Online (Sandbox Code Playgroud)

这不是我所期望的,因为没有新的线条也没有缩进.我希望得到以下内容:

<?xml version="1.0" encoding="utf-8"?>
<calibrated>true</calibrated>
<model label="label">
    <activity type="fixed"/>
</model>
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是有选择获得后者的输出?任何帮助,将不胜感激.

PS:我正在使用Ubuntu 12.04 LTS和gcc 4.6.3并提升1.48.

c++ xml boost boost-propertytree

8
推荐指数
1
解决办法
3625
查看次数

用boost属性树编写比普通xml更复杂的东西

UPD我已经找到答案,"格式化"的问题在这里,所以我删除了这部分的质询,请阅读最新的问题:

我需要在c ++上将xml写入文件系统.我已经学会了这个知识分子.在教程中使用了非常简单的xml.我的xml更复杂,我不知道如何修改代码来生成它.这就是我的代码:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

//<Root>
//  <Set Name="1">
//      <Field Name="Hello 1"/>
//      <Field Name="World 1"/>
//  </Set>
//  <Set Name="2">
//      <Field Name="Hello 2"/>
//      <Field Name="World 2"/>
//  </Set>
//</Root>

int main(int argc, char* argv[])
{
    using boost::property_tree::ptree;
    ptree pt;

    pt.put("Root.Set.Field", "Hello");
    pt.put("Root.Set.Field", "World");

    boost::property_tree::xml_writer_settings<char> settings('\t', 1);
    write_xml("testXml.xml", pt, std::locale(), settings);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

<?xml version="1.0" encoding="utf-8"?>
<Root>
<Set>
    <Field>World</Field>
</Set>
</Root>
Run Code Online (Sandbox Code Playgroud)

如何修改我的程序以生成所需的xml,特别是:

  • 如何添加多个同名的点头?true像那样添加pt.put("Root.Set.Field", "Hello", true);编译时错误 …

c++ boost boost-propertytree

6
推荐指数
1
解决办法
9987
查看次数

使用 Boost 更好的 XML 格式?

我正在使用 Boost 属性树将我的类实例导出为 XML 节点。它有效,但它只是将所有内容放在 1 行中。我希望它有缩进,例如:

<?xml version="1.0" encoding="utf-8"?>
<root>
<sensorconfigurations>
    <configuration>
        <name>SensorConfiguration1</name>
        <sensorid>1</sensorid>
        <signalindex>1</signalindex>
        <mappingscheme>mappingscheme1</mappingscheme>
        <soundpack>test1.wav</soundpack>
    </configuration>
    <configuration>
        <name>SensorConfiguration2</name>
        <sensorid>2</sensorid>
        <signalindex>2</signalindex>
        <mappingscheme>mappingscheme1</mappingscheme>
        <soundpack>test2.wav</soundpack>
    </configuration>
    <configuration>
        <name>SensorConfiguration3</name>
        <sensorid>3</sensorid>
        <signalindex>3</signalindex>
        <mappingscheme>mappingscheme2</mappingscheme>
        <soundpack>test3.wav</soundpack>
    </configuration>
</sensorconfigurations>
</root>
Run Code Online (Sandbox Code Playgroud)

这有可能吗?我是否缺少 write_xml 方法中的参数?

这是我的代码:

void SensorConfigurationBank::save()
{
using boost::property_tree::ptree;
ptree pt;
for(map<string, SensorConfiguration>:: iterator it = sensorConfigurations_.begin(); it != sensorConfigurations_.end(); ++it) 
{
    ptree myTree;
    myTree.put("name", it->second.getName());
    myTree.put("sensorid", it->second.getSensorID());
    myTree.put("signalindex", it->second.getsignalIndex());
    MappingScheme myScheme = it->second.getMScheme();
    myTree.put("mappingscheme", myScheme.getId());
    SoundPack mySound = it->second.getSound();
    myTree.put("soundpack", mySound.filepath_);

    pt.add_child("root.sensorconfigurations.configuration", myTree);
} …
Run Code Online (Sandbox Code Playgroud)

c++ xml boost ptree

1
推荐指数
1
解决办法
589
查看次数

标签 统计

boost ×3

c++ ×3

boost-propertytree ×2

xml ×2

ptree ×1