使用boost的property_tree写xml文件格式没有立体感

yupengchen1985 2012-02-17 06:30:05
最近使用property_tree做xml文件的读写,读的时候是没有什么问题,但是写入的时候,会出现格式没立体感的现象,要手动编辑才可以调整过来。举个例子,比如xml文件的格式本来应该是这样:
<?xml version="1.0" encoding="utf-8"?>
<debug name = "debugname">
<file name = "debug.log"/>
<modules type = "internal"/>
</debug>


但是用property_tree的write_xml函数写入时,会变成
<?xml version="1.0" encoding="utf-8"?>
<debug name = "debugname"><file name = "debug.log"/><modules type = "internal"/></debug>

虽然不影响文件解析,但是总会让人很烦,手动编辑的时候没有层次感,每次都要手动调整回来。
ps:
我的文件写入代码是:
ptree pt;
read_xml("debug_settings.xml", pt);

BOOST_FOREACH(ptree::value_type &v1, pt.get_child("debug"))
{
if (v1.first == "<xmlattr>")
{
cout<<"debug name="<<v1.second.get<string>("name")<<endl;
}
else if (v1.first == "file")
{
cout<<"file name="<<v1.second.get<string>("<xmlattr>.name")<<endl;
}
else if (v1.first == "modules")
{
cout<<"module type:"<<v1.second.get<string>("<xmlattr>.type")<<endl;
}
}

boost::property_tree::xml_writer_settings<char> settings('\t', 1);
pt.put("debug.chenyp", "test");
write_xml("debug_settings.xml", pt);

...全文
570 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyang2008 2014-11-05
  • 打赏
  • 举报
回复
boost::property_tree::xml_writer_settings<char> settings('\t', 1, "utf8"); boost::property_tree::write_xml(m_strFilePath,pt,std::locale(),settings);
aoelover 2014-01-13
  • 打赏
  • 举报
回复
多了空行是因为读文件时将换行、制表符等空白当成数据读了,然后再次保存时将读出来的数据加上pretty print时增加的空白一起写入了。 在读取时去年空白(第三个参数)就不会有多余的空行了: boost::property_tree::read_xml(strXmlFilePath, oPtree, boost::property_tree::xml_parser::trim_whitespace);
宋孝先 2013-07-22
  • 打赏
  • 举报
回复
问下楼主 这个问题是怎么解决的
  • 打赏
  • 举报
回复
引用 1 楼 cxsjabcabc 的回复:
使用settings作为write_xml的参数即可 write_xml("debug_settings.xml", pt, std::locale(), settings);
按照你说的,保存后的XML格式比较正常了,但是中间还是多了很多空行,请问这个是因为什麽呢? 谢谢!
mylovejsj 2012-05-07
  • 打赏
  • 举报
回复
加上write_xml("debug_settings.xml", pt, std::locale(), settings);后格式正确了
但是多出了不少空行
<?xml version="1.0" encoding="utf-8"?>
<log>










<selected>file</selected>
<!--选择file database io-->
yupengchen1985 2012-02-24
  • 打赏
  • 举报
回复
好的 我已经搞定了 谢谢楼上
程序员小迷 2012-02-18
  • 打赏
  • 举报
回复
使用settings作为write_xml的参数即可

write_xml("debug_settings.xml", pt, std::locale(), settings);

64,700

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧