我使用boost::property_tree
来读取和写入xml配置文件。我想更改代码中某些标记的值,并将它们写回文件,并使用一些合理的xml格式(新行,缩进等)。Boost属性树(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变得不可读。有没有办法从属性树本身或从生成的xml文件使用boost删除空行?
我知道还有其他方法通过再次读取和解析整个文件来删除换行符,但我希望能够更方便地使用一行代码。
我看你的正则表达式将如何取代冗余的新行,如果你有一个文件输出流和文本给出的字符串。但据我了解,我没有上述代码示例中的任何一个,那么如何使用我的问题中的示例代码进行此项工作? – untergam
我看到你已经找到了解决方案,但我仍然要详细说明这个问题,因为它在某些时候可能会有用。您首先将文件内容解压缩到“std :: string text”中,然后声明一个“std :: stringstream sstream”。然后你调用上面的函数,但传递字符串流而不是文件流。最后,你用字符串流而不是文件流调用'read_xml()'。 – FallenWarrior