使用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);
}
通过编译和执行程序,我得到以下输出:
<?xml version="1.0" encoding="utf-8"?>
<calibrated>true</calibrated><model label="label"><activity type="fixed"/></model>
这并不是我所期望的,因为没有新行或缩进。我希望得到以下内容:
<?xml version="1.0" encoding="utf-8"?>
<calibrated>true</calibrated>
<model label="label">
<activity type="fixed"/>
</model>
这是一个错误,还是可以选择获得后一个输出?任何帮助将不胜感激。
P.S。:我正在使用Ubuntu 12.04 LTS和gcc 4.6.3并提升1.48。
答案 0 :(得分:12)
与此同时,我找到了答案。应该使用xml_writer_settings,即:
xml_writer_settings<char> settings(' ', 4);
write_xml("test.xml", model_tree, std::locale(), settings);
构造函数中的第一个参数是用于缩进的字符,而第二个参数是缩进长度。由于解决方案没有记录,希望这将有助于其他人面临类似的问题。
答案 1 :(得分:2)
在write_xml
时使用设置设置参数
1.字符缩进
2:重复次数
boost::property_tree::xml_writer_settings<char> settings('\t', 1);
write_xml("xmlfilePath.xml", pt, std::locale(), settings);
答案 2 :(得分:1)
如果(至少)提升1.58,你可以试试这个:
pt::write_xml( "test.xml",
model_tree,
std::locale(),
pt::xml_writer_make_settings< std::string >( ' ', 4) );