Boost属性树(XML)删除空行

时间:2016-12-14 09:13:18

标签: c++ xml boost formatting boost-propertytree

我正在使用boost::property_tree来读取和编写xml配置文件。我想在我的代码中更改某些标签的值,并将它们写回文件,并使用一些合理的xml格式(新行,缩进等)。

目前我正在使用

std::fstream fs("filename");
boost::property_tree::ptree pt;
bpt::xml_parser::read_xml(fs,pt);

// replace value
pt.erase("tagname");
pt.put("tagname",newval);

bpt::xml_parser::xml_writer_settings<char> xmlstyle(' ',4);
bpt::xml_parser::write_xml("filename",pt,std::locale(),xmlstyle);

但似乎每次删除一个标签时,它都会留下一个空行,经过一些迭代后,xml变得不可读。有没有办法从属性树本身或使用boost?

从生成的xml文件中删除空行

我知道还有其他方法可以通过再次阅读和解析整个文件来删除换行符,但我希望有一个更方便的单行。

2 个答案:

答案 0 :(得分:1)

Not Boost,特别是空行。 在将输出写入文件之前,可以在输出上使用std::regex_replace(),删除空行,如下所示

std::regex_replace(std::ostreambuf_iterator<char>(fout), text.begin(), text.end(), std::regex("(\\n+)"), "\n");

fout作为文件输出流,将text作为输出数据作为std::string

这将替换每个换行符,后跟另一个换行符,其中包含一个换行符之间的任何字符。

答案 1 :(得分:1)

好的,看起来答案已经在Stack Overflow上了,我还没有找到它(帖子中没有提到换行符)

boost::property_tree XML pretty printing

解决方案是使用boost::property_tree::xml_parser::trim_whitespace

读取文件