Boost 属性树(XML)去除空行

Boost property tree (XML) remove blank lines

我正在使用 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 文件中删除空行?

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

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

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

fout作为文件输出流和text作为输出数据作为std::string.

这会将每个换行符后跟另一个换行符 w/o 之间的任何字符替换为单个换行符。

好的,看起来 Stack Overflow 上已经有了答案,我只是没有找到它(post 中没有提到换行符)

boost::property_tree XML pretty printing

解决方法是读取文件boost::property_tree::xml_parser::trim_whitespace